单例模式
最后更新于:2022-04-02 04:19:23
[TOC]
## 概述
**单例模式**是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。
**单例**模式由于限制了代码复用,且让单元测试复杂化而名声不佳。但它在有些情况下仍然非常实用,特别是在需要控制一些共享资源时十分方便
## 单例的实现
1. 将默认构造函数设为私有, 防止其他对象使用单例类的 new运算符。
2. 新建一个静态构建方法作为构造函数。 该函数会 “偷偷” 调用私有构造函数来创建对象, 并将其保存在一个静态成员变量中。 此后所有对于该函数的调用都将返回这一缓存对象。
## 单例模式结构
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/4a/a0/4aa04be27cfd73ca7d233b8f31d50a61_860x580.png)
**单例**(Singleton)类声明了一个名为`getInstance`获取实例的静态方法来返回其所属类的一个相同实例。
## 适合应用场景
1. 如果程序中的某个类对于所有客户端只有一个可用的实例, 可以使用单例模式。
2. 如果你需要更加严格地控制全局变量, 可以使用单例模式。
如:
1. 全局日志对象必须对日志文件的访问权限进行控制。
2. 共享的运行时配置存储
## 与其他模式的关系
- 外观模式类通常可以转换为单例模式类, 因为在大部分情况下一个外观对象就足够了。
- 如果你能将对象的所有共享状态简化为一个享元对象, 那么享元模式就和单例类似了。 但这两个模式有两个根本性的不同。
- 抽象工厂模式、 生成器模式和原型模式都可以用单例来实现。
';