用私有构造器或者枚举类型强化Singleton属性
2017-07-15 12:32
519 查看
实现Singleton一般方法:
当然也有需要使用的时候才初始化的方法,这样就要考虑线程安全的问题。
这种初始化的方法在一般使用的时候可以保证是同一个对象,但是在持久化的时候就会出现问题,
持久化过后就会变成两个对象。
示例:
false
这种时候,可以添加一个方法解决:
true
这种方式的实现比较复杂,
java1.5发行版本起,实现singleton还有第三种方法,只需要编写一个包含单个元素的枚举类型:
true
该方式也无偿提供了序列化机制,绝对防止多次实例化。
public class Elvis implements Serializable{ private static final Elvis INSTANCE=new Elvis(); private Elvis(){ } public static Elvis getInstance(){ return INSTANCE; }
}
当然也有需要使用的时候才初始化的方法,这样就要考虑线程安全的问题。
这种初始化的方法在一般使用的时候可以保证是同一个对象,但是在持久化的时候就会出现问题,
持久化过后就会变成两个对象。
示例:
public static void main(String[] args){ File file=new File("hello"); if(!file.exists()){ try { Elvis elvis=getInstance(); file.createNewFile(); ObjectOutputStream objectOutputStream=new ObjectOutputStream(new FileOutputStream(file)); objectOutputStream.writeObject(elvis); objectOutputStream.close(); ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream(file)); Elvis elvis1=(Elvis)objectInputStream.readObject(); if(elvis1!=null){ System.out.println(elvis1==elvis); } } catch (Exception e) { e.printStackTrace(); } } }
false
这种时候,可以添加一个方法解决:
private Object readResolve(){ return INSTANCE; }
true
这种方式的实现比较复杂,
java1.5发行版本起,实现singleton还有第三种方法,只需要编写一个包含单个元素的枚举类型:
public enum EumTest { MYENUM; public void Test(){ System.out.println("Hello"); } public String speak(String str){ return str; } }
public class Test { public static void main(String[] args){ EumTest eumTest=EumTest.MYENUM; System.out.println(eumTest.speak("Hello,tom")); eumTest.Test(); EumTest eumTest1=EumTest.MYENUM; eumTest1.Test(); System.out.println(eumTest==eumTest1); } }
true
该方式也无偿提供了序列化机制,绝对防止多次实例化。
相关文章推荐
- 第三条:用私有构造器或者枚举类型强化Singleton属性
- Effective Java(3) --用私有构造器或者枚举类型强化Singleton属性
- Effective Java -- 用私有构造器或者枚举类型强化Singleton属性
- 第三条:用私有构造器或者枚举类型强化Singleton属性
- 用私有构造器或者枚举类型强化singleton属性——Effective Java 读书笔记
- Effective Java 读书笔记(三):用私有构造器或者枚举类型强化Singleton属性
- 用私有构造器或者枚举类型强化 Singleton属性
- 《Effective Java》用私有构造器或者枚举类型强化SingleTon属性
- Effective java第三条:使用私有构造器或者枚举类型强化Singleton属性
- 用私有构造器或者枚举类型强化Singleton属性
- Effective Java学习笔记之第3条 用私有构造器或者枚举类型强化Singleton属性
- 创建和销毁对象 - 用私有构造器或者枚举类型强化Singleton属性
- 用私有构造器或者枚举类型强化Singleton属性。
- 第3条:用私有构造器或者枚举类型强化Singleton属性
- 《Effective java》读书记录-第3条-用私有构造器或者枚举类型强化Singleton属性
- Java学习笔记3:用私有构造器或者枚举类型强化Singleton属性
- 用私有构造器或者枚举类型强化Singleton属性
- Android 编码规范:(三)用私有构造器或者枚举类型强化Singleton属性
- 《effective java》读书札记第三条用私有构造器或者枚举类型强化Singleton属性
- Java学习笔记3:用私有构造器或者枚举类型强化Singleton属性