经常有小伙伴问我,设计模式学了这么久,每次看到概念也都能理解。但是,就是不知道怎么用,在哪里能用?我告诉大家,设计模式,不是为了要用而用的,而是作为前人总结下来的经验,等到哪天需要用的时候,你能想起来为你所用。
今天我跟大家分享一下,什么场景下需要用单例模式,什么场景下不应该用单例模式?回答这个问题之前,我得先问小伙伴们一个问题。你觉得一家公司能有两个CEO吗?如果有两个CEO,请问谁做决策,员工应该听谁的?所以,在这种情况下,很显然公司的CEO只能是单例。
1、官方定义
官方原文是这样的:
Ensure a class has only one instance,and provide a global point of access to it.
翻译过来就是:
指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点
2、如何理解
那么,怎么来理解这句话呢?这句话有两个重点,就是任何情况和全局访问点。
任何情况:可能包括多线程、克隆、反序列化、反射等等各种情况。
全局访问点:意思就是统一获取单例对象的入口。
对照我一开始提出的CEO案例来理解的话,CEO应该被设计为单例,统一行动,统一指挥。如果出现多个CEO发出不同指令,员工就不知道听谁的了。
3、使用建议
单例模式适合在哪些场景下使用?
如果某个共享资源,使用频次非常高,而且不可替代性也很强,就应该被设计为单例。比如,Spring中的IoC容器就是单例、JDK中的Runtime也是单例。
那哪些场景不适合设计为单例模式呢?
比如要经常被赋值传递的对象,Vo、Pojo等等,就不适合设置为单例。
最后,一句总结单例模式就是保证独一无二。