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