11## 一、单体模式(Singleton Pattern)
22### 1.概念介绍
3- ** 单体模式(Singleton Pattern)** 的思想在于** 保证一个特定类仅有一个实例** ,即不管使用这个类创建多少个新对象,都会得到** 与第一次创建的对象完全相同** 。
3+ ** 单体模式(Singleton Pattern)** 的思想在于** 保证一个特定类仅有一个实例** ,并提供一个访问它的全局访问点。
4+
5+ 即不管使用这个类创建多少个新对象,都会得到** 与第一次创建的对象完全相同** 。
46
57它让我们能将代码组织成一个逻辑单元,并可以通过单一变量进行访问。
68
7- 单体模式有以下优点:
9+ 单体模式有以下** 优点:**
10+
811* 用来划分命名空间,减少全局变量数量。
912* 使代码组织的更一致,提高代码阅读性和维护性。
10- * 只能被实例化一次。
13+ * 内存中只有一个实例,减少了内存开支。
14+ * 可以在系统设置全局的访问点,优化和共享资源的访问。
15+
16+ ** 缺点:**
17+
18+ 一般没有接口,扩展很困难,若要扩展,除了修改代码基本上没有第二种途径可以实现。
1119
1220但在JavaScript中没有类,只有对象。当我们创建一个新对象,它都是个新的单体,因为JavaScript中永远不会有完全相等的对象,除非它们是同一个对象。
1321因此,** 我们每次使用对象字面量创建对象的时候,实际上就是在创建一个单例** 。
@@ -31,7 +39,9 @@ let a1 = {
3139}
3240new a1 (); // Uncaught TypeError: a1 is not a constructor
3341```
42+
3443下面展示一个单体模式的基本结构:
44+
3545``` js
3646let Singleton = function (name ){
3747 this .name = name;
@@ -52,6 +62,32 @@ g2.getName(); // 'leo'
5262```
5363从这里可以看出,单体模式只能实例化一次,后面再调用的话,都是使用第一次实例化的结果。
5464
65+ 使用 TypeScript 实现一个简单的单体模式:
66+
67+ ``` js
68+ class Singleton {
69+ private constructor () { }
70+
71+ private static singleton: Singleton
72+ public static getInstance (): Singleton {
73+ if (! Singleton .singleton ) {
74+ Singleton .singleton = new Singleton ();
75+ }
76+ return Singleton .singleton
77+ }
78+ }
79+ function show (): void {
80+ const s1 = Singleton .getInstance ();
81+ const s2 = Singleton .getInstance ();
82+ if (s1 == s2) {
83+ console .log (111 )
84+ } else {
85+ console .log (222 )
86+ }
87+ }
88+ show ()
89+ ```
90+
5591### 2.应用场景
5692单例模式只允许实例化一次,能提高对象访问速度并且节约内存,通常被用于下面场景:
5793* 需要频繁创建再销毁的对象,或频繁使用的对象:如:弹窗,文件;
0 commit comments