摘要: 思想: 一个单例类,无论采取哪一种设计(单元素枚举类除外), 一旦间接或者直接实现 Serializable 接口,为了保证单例,就要多增加一点考虑:保证类在反序列化之后能够保证单例。 以上是一个单例的简单饿汉模式实现,实现了 Serializable 接口。从类名上也不难看出,这是个错误示例。 每 阅读全文
posted @ 2017-09-10 18:29 Gerrard_Feng 阅读(745) 评论(0) 推荐(0)
摘要: 思想: 登记模式,和前面5种单例不一样,从本质上来说,这是一种兼顾创建和管理单例的方法。 主要实现步骤是: 所有单例都继承于一个共同的父类。 子类通过父类完成单例的创建,父类使用反射创建子类。 父类持有一个 String-Object 的数据模型去存储创建出来的单例对象,一般称为 Registry。 阅读全文
posted @ 2017-09-10 18:12 Gerrard_Feng 阅读(666) 评论(0) 推荐(0)
摘要: 思想: 单元素的枚举类型已经成为实现 Singleton 的最佳方法。 —— 《Effective Java》 第三条:用私有构造器或者枚举类型强化 Singleton 属性 优势? 代码简洁。 基于 enum 的特性,有效地防止反射的入侵。 无偿提供了序列化的支持,但是不用加入 readResol 阅读全文
posted @ 2017-09-10 17:40 Gerrard_Feng 阅读(629) 评论(0) 推荐(0)
摘要: 思想: 这种静态代码块模式,本质上是饿汉模式的一个变种。 它将类的静态 Field 的初始化,转移到静态代码块中(这么做的优势尚不明确)。 在 JDK 源码中有一个具体的例子:sun.misc.Unsafe (是 Java 代码用来直接操作内存空间的类)。 实现方式,就是把初始化的工作,放到静态代码 阅读全文
posted @ 2017-09-10 17:32 Gerrard_Feng 阅读(1836) 评论(0) 推荐(0)
摘要: 思想: 相比于懒汉以及饿汉模式,静态内部类模式(一般也被称为 Holder)是许多人推荐的一种单例的实现方式,因为相比懒汉模式,它用更少的代码量达到了延迟加载的目的。 顾名思义,这种模式使用了一个私有的静态内部类,来存储外部类的单例,这种静态内部类,一般称为 Holder。 而利用静态内部类的特性, 阅读全文
posted @ 2017-09-10 17:21 Gerrard_Feng 阅读(12999) 评论(0) 推荐(1)
摘要: 思想: 相比于饿汉模式,懒汉模式实际中的应用更多,因为在系统中,“被用到时再初始化”是更佳的解决方案。 设计思想与饿汉模式类似,同样是持有一个自身的引用,只是将 new 的动作延迟到 getinstance() 方法中执行。 反射能否打破单例? 对于 LazySingleton,这是个很有趣的问题, 阅读全文
posted @ 2017-09-10 16:48 Gerrard_Feng 阅读(1713) 评论(0) 推荐(0)