GoF 23 种设计模式之单例模式
概念
单例模式是设计模式中使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。
在Java语言中,这样的行为能带来两大好处。
1\. 对于频繁使用的对象,可以省略创建对象所花费的时间,这对于一些重量级的对象而言,是非常可观的一笔系统开销。
2\. 由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。
角色
单例模式的参与者非常简单,只有单例类和使用者两个。
1\. 单例类,提供单例的工程,返回单例类。
2\. 使用者,获取并使用单例类。
基本结构
单例模式的核心在于通过一个接口返回唯一的对象实例。
饿汉模式
饿汉模式的单例,在JVM加载单例类时,单例对象就会被建立。如果此时,这个单例类在系统中还扮演者其他角色,那么在任何使用这个单例类的地方都会初始化这个单例变量,而不管是否会被用到。
运行结果:
`HungrySingleton is create
createString in HungrySingleton`
懒汉模式
懒汉模式,实现延迟加载,确保系统启动时没有额外的负载,提高系统在相关函数调用时的反应速度。
线程不安全的懒汉
线程安全的懒汉
为了使用延迟加载引入的同步关键字反而降低了系统性能。
`HungrySingleton is create
spend:5ms`
`SyncLazySingleton is create
spend:22ms`
内部类实现单例
使用内部类的方式实现单例,既可以做到延迟加载,也不必使用同步关键字,是一种比较完善的实现。
单例序列化
最简洁的单例
`true
class org.wuxinshui.boosters.designPatterns.singleton.SingletonEnu`
破坏单例
通过反射机制,强行调用单例类的构造函数,生成多个单例,破坏单例模式。
StaticSingleton
中添加计数器。
运行结果:
版权声明: 本文为 InfoQ 作者【无心水】的原创文章。
原文链接:【http://xie.infoq.cn/article/b9a74f2cd23c5f77bafb903f6】。文章转载请联系作者。
评论