Effective Jave——第3条:用私有构造类或者枚举类实现Singleton

来源:互联网 发布:淘宝卖家设置多个客服 编辑:程序博客网 时间:2024/06/08 09:03

Singleton实例化一次的类,常用于代表那些本质上唯一的系统组件。

在Java 1.5之前,有两种方式来实现Singleton,这两种方法均将构造函数设为私有,并且公有的静态成员。

1.将final域设置为公有

public class Elivis {    public static final Elivis INSTANCE= new Elivis();    private Elivis(){...}    //确保只返回一个Elivis实例,并且让GC关注伪装的Elivis对象    private Object readResolve() {        return INSTANCE;    }    public void leaveTheBuilding() {...}}

2.静态工厂方法设为公有

public class Elivis {    private static final Elivis INSTANCE= new Elivis();    private Elivis(){...}    public static Elivis getInstance() {        return INSTANCE;    }    //确保只返回一个Elivis实例,并且让GC关注伪装的Elivis对象    private Object readResolve() {        return INSTANCE;    }    public void leaveTheBuilding() {...}}

3.自Java 1.5发布之后,还有实现Singleton的第三种方式,即是使用单个元素枚举

public enum Elivis{    INSTANCE;    public void leaveTheBuilding() {...}}

该方法提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击时。

0 0