设计模式:单例模式(Singleton)
来源:互联网 发布:蚁群算法求解tsp问题 编辑:程序博客网 时间:2024/05/19 22:50
单例模式在23个设计模式中算得上是最简单的一个了,也许你会有异议,那就换成“最简单之一”,这样就严谨了很多。
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
适用性:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
单例模式有5中写法(线程安全):
1. 饿汉式
2. 懒汉式
3. 双检索(DCL)
4. 占位符式
5. 枚举式
下面分别展示这五种写法(详细内容可以参考博主的《singleton模式四种线程安全的实现》和《如何防止单例模式被JAVA反射攻击》)
饿汉式
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
懒汉式
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
双检锁
(博主不建议使用)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
占位符式
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
枚举式
有关枚举的详细资料可以参考《Java枚举类型enum》
- 1
- 2
- 3
- 4
Jdk中的单例模式:
java.lang.Runtime#getRuntime()
总结
枚举式式最简单最优秀的单例写法,可以防止反射工具(详细参考《如何防止单例模式被JAVA反射攻击》)和序列化破坏(详细参考《JAVA序列化 》),《Effective Java》的作者Joshua Bloch推荐使用这种写法,博主也认为这种写法不错,只是用的人较少,没有普遍性,建议编程时采用占位符式(不能防止反射和序列化破坏),当然写成枚举式就更好啦。
参考资料
1. 《singleton模式四种线程安全的实现》
2. 《如何防止单例模式被JAVA反射攻击》
3. 《JAVA序列化 》
4. 《Java枚举类型enum》
5. 《Effective Java(Second Edition)》Joshua Bloch.
6. 《细数JDK里的设计模式》
- 设计模式---单例模式(singleton)
- 设计模式--单例模式(Singleton)
- 设计模式--单例模式(Singleton)
- 设计模式-单例模式(Singleton)
- 【设计模式】-单例模式(Singleton)
- 设计模式---单例模式(singleton)
- 设计模式 -- 单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式-单例模式(Singleton)
- 【设计模式】单例模式(Singleton)
- 设计模式-单例(Singleton)模式
- 设计模式--单例模式(Singleton)
- 设计模式----单例模式(singleton)
- 设计模式----Singleton(单例)
- 安卓手机密码破解大全,保准有你没见过的方法
- 【u126】矩形
- python——main函数的参数(命令行参数)
- zzulioj-1917-E【思维】
- 冒泡-快速排序(java)-数组中最小的k个数
- 设计模式:单例模式(Singleton)
- final,finalize,finally 的区别
- 股票最大利润
- jps 报process information unavailable解决办法
- TDDL 事务
- ACM几何题目大全
- Ubuntu Linux 开启远程ssh
- Eclipse插件Lambok,实现自动生成Java代码
- 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)