设计模式之单例模式
2021 algorithm单例模式(Singleton Design Pattern),一个类只允许创建一个对象(或者实例),这个类就是一个单例类,这种设计模式被叫做单例设计模式。
为什么要用单例?
-
资源访问冲突
当我们定义一个类的时候,若在不同的对象都创建该类,那么可能存在相互覆盖的问题。通过设计成一个单例类,在程序中只允许创建一个对象,所有的线程共享使用该对象,就可以避免会互相覆盖的问题。
-
全局唯一类
配置信息类等在系统只应保存一份的东西。
全局变量的比较
单例模式与全局变量,全局变量必须在程序一开始就创建好对象,如果这个对象非常消耗资源,而程序在这次执行过程中又一直没用到它,就会非常浪费资源。
利用单例模式,则在需要的时候,才创建对象。同时单例模式确保对象只会被初始化一次。
实现单例
用 Java 实现一个经典的单例模式
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {}
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
用 TypeScript 的 class 完成一个单例:
class Store {
static instance;
static getInstance() {
if (!Store.instance) {
Store.instance = new Store();
}
return Store.instance;
}
}
单例存在的问题
- 单例对 OOP 特性的支持不友好
- 单例会隐藏类之间的依赖关系
- 单例对代码扩展性不友好
- 单例对代码的可测性不友好
- 单例不支持有参数的构造函数
参考链接
- 极客时间:设计模式之美
- 《Head First 设计模式》