什么场景要使用单例模式,什么场景不能使用?

简介: 经常有小伙伴问我,设计模式学了这么久,每次看到概念也都能理解。但是,就是不知道怎么用,在哪里能用?我告诉大家,设计模式,不是为了要用而用的,而是作为前人总结下来的经验,等到哪天需要用的时候,你能想起来为你所用。

经常有小伙伴问我,设计模式学了这么久,每次看到概念也都能理解。但是,就是不知道怎么用,在哪里能用?我告诉大家,设计模式,不是为了要用而用的,而是作为前人总结下来的经验,等到哪天需要用的时候,你能想起来为你所用。


今天我跟大家分享一下,什么场景下需要用单例模式,什么场景下不应该用单例模式?回答这个问题之前,我得先问小伙伴们一个问题。你觉得一家公司能有两个CEO吗?如果有两个CEO,请问谁做决策,员工应该听谁的?所以,在这种情况下,很显然公司的CEO只能是单例。

1、官方定义

官方原文是这样的:


Ensure a class has only one instance,and provide a global point of access to it.


翻译过来就是:


指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点

c2f283429db5c38a992a96c04934f65c.jpg

2、如何理解

那么,怎么来理解这句话呢?这句话有两个重点,就是任何情况和全局访问点。


任何情况:可能包括多线程、克隆、反序列化、反射等等各种情况。


全局访问点:意思就是统一获取单例对象的入口。


对照我一开始提出的CEO案例来理解的话,CEO应该被设计为单例,统一行动,统一指挥。如果出现多个CEO发出不同指令,员工就不知道听谁的了。

3、使用建议

单例模式适合在哪些场景下使用?


如果某个共享资源,使用频次非常高,而且不可替代性也很强,就应该被设计为单例。比如,Spring中的IoC容器就是单例、JDK中的Runtime也是单例。


那哪些场景不适合设计为单例模式呢?


比如要经常被赋值传递的对象,Vo、Pojo等等,就不适合设置为单例。


最后,一句总结单例模式就是保证独一无二。

相关文章
|
6月前
|
设计模式
单例模式
单例模式
37 0
|
5月前
|
设计模式 安全 Java
单例模式分享
单例模式分享
23 0
|
6月前
|
安全 C++
C++单例模式
C++单例模式
52 1
|
安全 Java
原来要这么实现单例模式
原来要这么实现单例模式
55 0
找对象需要单例模式吗?
单例模式的类只提供私有的构造函数
|
SQL 安全 Java
五种单例模式介绍
五种单例模式介绍
91 0
|
存储 安全 调度
单例模式的简单介绍
单例模式的简单介绍
|
设计模式 安全 Java
回顾一下单例模式
回顾一下单例模式
|
设计模式 数据库 Python
|
XML 设计模式 安全
单例模式,真不简单
单例模式,真不简单
单例模式,真不简单