首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Effective Java:Ch2_创造销毁对象:Item3_使用私有构造函数或枚举类型强化Singleton属性

2013-01-18 
Effective Java:Ch2_创建销毁对象:Item3_使用私有构造函数或枚举类型强化Singleton属性所谓Singleton,是指

Effective Java:Ch2_创建销毁对象:Item3_使用私有构造函数或枚举类型强化Singleton属性

        所谓Singleton,是指仅能被实例化一次的类。Singleton通常代表本质上唯一的系统组件,例如窗口管理器或文件系统。让一个类成为Singleton就无法为Singleton替换模拟实现,除非它实现一个作为其类型的接口,所以会让其客户端难于测试。

        JDK1.5之前,有两种方法可以实现Singleton,二者均基于让构造函数私有化,并导出一个公共静态成员来提供对唯一实例的访问。在方法一中,该公共静态成员是一个final域:

 ANY-ACCESS-MODIFIER Object readResolve() throws ObjectStreamException;

此 writeReplace、readResolve 方法将由序列化调用,前提是如果此方法存在,而且它可以通过被序列化对象的类中定义的一个方法访问。因此,该方法可以拥有私有 (private)、受保护的 (protected) 和包私有 (package-private) 访问。子类对此方法的访问遵循 java 访问规则。


        也就是说,

        writeReplace()方法返回的对象,就是要被序列化的对象,我们有机会在序列化前把这个对象给换成我们确定好的那个(貌似没什么用处);

        readResolve()方法就是在反序列化完成得到对象前,把这个对象给换成我们确定好的那个。

       为了防止有人恶意通过序列化的机制破坏定义好的单例,就需要自己实现readResolve()方法,把单例定义的唯一实现在这个方法中返回。



    


热点排行