单例模式

传统的单例模式可以用来解决所有代码必须写到 class 中的问题:

  1. class Singleton {
  2. private static instance: Singleton;
  3. private constructor() {
  4. // ..
  5. }
  6. public static getInstance() {
  7. if (!Singleton.instance) {
  8. Singleton.instance = new Singleton();
  9. }
  10. return Singleton.instance;
  11. }
  12. someMethod() {}
  13. }
  14. let someThing = new Singleton(); // Error: constructor of 'singleton' is private
  15. let instacne = Singleton.getInstance(); // do some thing with the instance

然而,如果你不想延迟初始化,你可以使用 namespace 替代:

  1. namespace Singleton {
  2. // .. 其他初始化的代码
  3. export function someMethod() {}
  4. }
  5. // 使用
  6. Singleton.someMethod();

WARNING

单例只是全局的一个别称。

对大部分使用者来说,namespace 可以用模块来替代。

  1. // someFile.ts
  2. // ... any one time initialization goes here ...
  3. export function someMethod() {}
  4. // Usage
  5. import { someMethod } from './someFile';

原文: https://jkchao.github.io/typescript-book-chinese/tips/singletonPatern.html