创建型-工厂方法模式

概念

Singleton Pattern:确保某一个类只有一个实例,并提供一个全局访问点。

使用

单例模式在我们实际开发中会经常使用到,比如点击登录框,只会弹出有且只有一个登录框

以下是 JS 的例子,Java 例子需前往 –>Java进阶-单利模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Singleton {
constructor(name) {
this.name = name;
// 一个标记,用来判断是否已经创建了该类的实例
this.instance = null;
}
// 提供一个静态方法,用户可以直接在类上调用
static getInstance(name) {
// 没有实例化的时候创建一个该类的实例
if(!this.instance) {
this.instance = new Singleton(name);
}
// 已经实例化了,返回第一次实例化对象的引用
return this.instance;
}
}
let a = Singleton.getInstance('111')
let b = Singleton.getInstance('222')
console.log(a, b, a === b);
// Singleton {name: "111", instance: null} Singleton {name: "111", instance: null} true

优点

  • 节约系统资源:该类在系统内存中只存在一个对象
  • 提供对唯一实例的受控访问:单例类封装了唯一实例

缺点

  • 由于单例模式中没有抽象类,因此单例类很难进行扩展
  • 对于有垃圾回收系统的语言 Java,C# 来说,如果对象长时间不被利用,则可能会被回收。那么如果这个单例持有一些数据的话,在回收后重新实例化时就不复存在了