Effective Java (3) 使用似有构造器或者枚举强化Singleton属性

来源:互联网 发布:小受坐轮椅卖淘宝 编辑:程序博客网 时间:2024/05/21 06:19

摘要:

Singleton是仅被初始化一次的对象,往往是一些系统组件,比如文件系统。

方式优点缺点final公有静态成员代码中会清晰表明静态成员是一个SingletonSingleton模式固定,无法不改变API地改为其他模式,需要注意序列化工厂方法灵活的API,容易被修改需要注意多线程安全,需要注意序列化使用枚举天生支持序列化 单元素枚举是最佳的Singleton实现模式。


正文:

Singleton是一种广泛使用的模式。在1.5版本之前,有2种方式可以实现。

一是final 共有静态成员:

public class  Singleton{  public static final instance=new Singleton();  private Singleton(){  }}


使用这样的方式,可以很明确的看出Singleton实例。

另一种方法是工厂方法:

public class Singleton{  private static final Singleton;  private Singleton(){ }  public static Singleton getInstance(){  if(instance ==null){    instance = new Singleton();  }  return instance;  }}

使用工厂方法的好处在于,可以不改变接口而替换Singleton的实现,比如从单一实例变成每个线程一个实例。

另外在1.5以后,可以使用枚举来创建实例:

public enum Singleton{  INSTANCE;  public someMethod(){  ...  }}

对于单一实例,enum是最好的实现,因为这个方式天生支持序列号,而且可以保证实例唯一性


0 0