Effective Java (3) 使用似有构造器或者枚举强化Singleton属性
2014-07-14 21:27
459 查看
摘要:
Singleton是仅被初始化一次的对象,往往是一些系统组件,比如文件系统。
单元素枚举是最佳的Singleton实现模式。
正文:
Singleton是一种广泛使用的模式。在1.5版本之前,有2种方式可以实现。
一是final 共有静态成员:
使用这样的方式,可以很明确的看出Singleton实例。
另一种方法是工厂方法:
使用工厂方法的好处在于,可以不改变接口而替换Singleton的实现,比如从单一实例变成每个线程一个实例。
另外在1.5以后,可以使用枚举来创建实例:
对于单一实例,enum是最好的实现,因为这个方式天生支持序列号,而且可以保证实例唯一性
Singleton是仅被初始化一次的对象,往往是一些系统组件,比如文件系统。
方式 | 优点 | 缺点 |
final公有静态成员 | 代码中会清晰表明静态成员是一个Singleton | Singleton模式固定,无法不改变API地改为其他模式,需要注意序列化 |
工厂方法 | 灵活的API,容易被修改 | 需要注意多线程安全,需要注意序列化 |
使用枚举 | 天生支持序列化 |
正文:
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是最好的实现,因为这个方式天生支持序列号,而且可以保证实例唯一性
相关文章推荐
- Effective java第三条:使用私有构造器或者枚举类型强化Singleton属性
- Effective Java -- 用私有构造器或者枚举类型强化Singleton属性
- Effective Java之用私有构造器或者枚举类型强化Singleton属性(三)
- Effective Java - 创建和销毁对象 - 用私有构造器或者枚举类型强化 Singleton 属性
- Effective Java(3) --用私有构造器或者枚举类型强化Singleton属性
- Effective Java 学习 第三条 用私有构造器或者枚举类型强化Singleton属性
- Effective Java (3) - 用私有构造器或者枚举类型强化Singleton属性
- Effective Java 3rd 条目3 用私有构造子或者枚举类型强化单例属性
- 高效Java03:使用私有构造器或枚举类型强化单例属性
- EffectiveJava-用私有构造器或者枚举强化Singleton属性
- Effective java第三条:用私有构造器或者枚举类型强化singleon属性
- 用私有构造器或者枚举来强化Singleton属性
- [Effective Java Distilled] Item 3 通过使用私有构造方法或者枚举类型来强化单例属性
- [Effective Java Distilled] Item 3 通过使用私有构造方法或者枚举类型来强化单例属性
- Java学习笔记3:用私有构造器或者枚举类型强化Singleton属性
- Java学习笔记3:用私有构造器或者枚举类型强化Singleton属性
- EffectiveJava(3)使用是由构造器或枚举类型强化singleton
- 第3条:用私有构造器或者枚举类型强化Singleton属性
- 第三条:用私有构造器或者枚举类型强化Singleton属性
- Effective Java 之 --- 用私有构造器或者枚举类型强化Singleton属性