JS设计模式大合集
仓库地址:JS设计模式大合集
欢迎大家 Star ,一起交流学习!
JS设计模式-单列模式
单列模式(Singleton pattern)是一种常见的设计模式,用于限制一个类只能有一个实例,并提供一个全局访问点来获取这个唯一实例。换言之,你只能创建一个特定类的对象。如果你尝试创建一个已存在的实例,那么它将始终返回你已创建的那个实例。
这种模式特别适合需要保持状态的场合,例如
- 数据库连接
- 日志记录
- VUEX
- 或者任何其他可能需要多个地方更新的数据
来写一个单列模式吧
如我们上面所说,单列模式只有一个实例,并且提供一个全局的访问点来访问获取这个唯一实例
。因此,也就是私有属性。在js中,我们可以利用闭包
来做私有属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| type myInstance = { name: string; showMessage: () => void; };
const Singleton = (function () { let _instance: myInstance;
function createInstance(): myInstance { return { name: "chuyuxuan0v0", showMessage: () => { console.log("Hello , This is a Singleton of chuyuxuan0v0!"); } }; }
return { getInstance: function () { if (!_instance) { _instance = createInstance(); } return _instance; } }; })();
const instance1 = Singleton.getInstance(); const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); instance1.showMessage();
|
当然,我们也可以采用ES6(ECMAScript 2015)中的class来处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class SingletonClass { private static instance: SingletonClass; public name: string | null; public showMessage: () => void; private constructor(name: string | null, fuc: () => void) { this.name = name; this.showMessage = fuc; }
public static getInstance(): SingletonClass { if (!SingletonClass.instance) { SingletonClass.instance = new SingletonClass('chuyuxuan0v0', () => { console.log("Hello , This is a SingletonClass of chuyuxuan0v0!"); }); } return SingletonClass.instance; }
}
const singleton1 = SingletonClass.getInstance(); const singleton2 = SingletonClass.getInstance();
console.log(singleton1 === singleton2); console.log(singleton2.name); singleton1.showMessage();
|
结束语
单列设计模式算是最简单的设计模式了,它带来的好处如下:
- 确保只有一个实例: 单例模式确保一个类只有一个实例存在。这对于那些需要且只能有一个实例的类非常有用,比如配置信息、日志记录器等。通过单例模式,可以防止多个实例导致的资源浪费或不一致性问题。
- 全局访问点: 单例模式提供了一个全局访问点来访问唯一的实例。这样其他类可以轻松地访问单例实例,而不必担心实例化的细节。
- 延迟实例化: 单例模式允许在需要时才实例化对象,而不是在应用程序启动时立即实例化。这种延迟实例化的方式可以节省资源,并提高应用程序的性能。
- 避免全局变量污染: 单例模式将实例封装在类内部,避免了全局变量的污染。这有助于保持代码的清晰度和可维护性。
- 简化了对象管理: 单例模式简化了对象的管理,因为它只有一个实例。这减少了对象之间的耦合性,并使得代码更容易理解和维护。
通过这些,我们能更好的维护自己的代码。