5分钟掌握设计模式之:单例模式
本文思维导图
什么是单例模式
简介
-
单例模式属于创建型模式,它保证一个类只有一个实例,并提供唯一节点访问该实例。
-
单例模式主要解决一个全局使用的类被频繁地创建与销毁对象,浪费系统资源的问题。
-
使用单例模式时首先要判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
-
单例模式的构造函数是私有的。
单例模式是设计模式中使用很频繁的一种模式,在各种开源框架、应用系统中多有应用。
单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。
这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
特点
- 保证一个类只有一个实例。
如果你创建了一个对象,同时过一会儿后你决定再创建一个新对象,在单例模式下你会获得之前已创建的对象,而不是普通构造函数总是返回一个新对象。
- 为该实例提供一个全局访问节点。
优点
- 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
- 避免对资源的多重占用(比如写文件操作)。
缺点
-
没有接口
-
不能继承
-
违反了 单一职责原则*
单一职责原则:修改一个类的原因只能有一个。
为什么要使用单例模式?
单例模式的应用场景
- 如果程序中的某个类对于所有客户端只有一个可用的实例, 可以使用单例模式。
单例模式禁止通过除特殊构建方法以外的任何方式来创建自身类的对象。 该方法可以创建一个新对象, 但如果该对象已经被创建, 则返回已有的对象。
- 如果你需要更加严格地控制全局变量, 可以使用单例模式。
单例模式与全局变量不同, 它保证类只存在一个实例。 除了单例类自己以外, 无法通过任何方式替换缓存的实例。
请注意, 你可以随时调整限制并设定生成单例实例的数量, 只需修改 获取实例方法, 即 getInstance 中的代码即可实现。
如何使用单例模式?
单例模式的结构
-
单例(Singleton)类声明了一个名为getInstance获取实例的静态方法来返回其所属类的一个相同实例。
-
单例的构造函数必须对客户端(Client)代码隐藏。调用获取实例方法必须是获取单例对象的唯一方式。
单例模式的实现特点
所有单例的实现都包含以下两个相同的