zoukankan      html  css  js  c++  java
  • 第3条:用私有构造器或者枚举类型强化Singleton属性

    Singleton是指仅仅被实例化一次的类。通过被用来代表那些本质上唯一的系统组件,比如窗口管理器或者文件系统。

    在http://www.cnblogs.com/13jhzeng/p/5256424.html中,提到了不同情境下Singleton多种实现方法。

    使用单例类的方法来实现的Singleton在让其变成可序列化(Serializable)时,仅仅在声明上加上“implements Serializable”是不够的,为了维护并保证Singleton,必须声明所有实例域都是transient瞬时的,并提供一个readResolve方法,否则每次反序列化一个序列化实例时,都会创建一个新的实例。

    private Object readResolve() {
        return INSTANCE;
    }

    从Java 1.5起,实现Singleton,只需编写一个包含单个元素的枚举类型:

    public enum Elvis {
        INSTANCE;
        private Elvis() {    //枚举类型默认的构造器就是private的
            System.out.println("Singleton");
        };
    }

    这种方法实现起来更加简介,无偿地提供序列化机制(无需去实现Serializable),即使面对复杂的序列化或者反射攻击的时候,绝对防止多次实例化。

  • 相关阅读:
    NopCommerce4.2 常见错误及异常处理
    使用NopCommerce微信电商系统
    简单理解Socket
    html5 postMessage解决跨域、跨窗口消息传递
    html5 Web Workers
    node.js module初步理解
    node.js调试
    最简单的JavaScript模板引擎
    简单JavaScript模版引擎优化
    容易被忽略CSS特性
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5605838.html
Copyright © 2011-2022 走看看