您的位置:首页 > Web前端

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

2014-07-14 21:27 459 查看
摘要:

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是最好的实现,因为这个方式天生支持序列号,而且可以保证实例唯一性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐