本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看 活动链接
Q:
在 Java 中实现单例模式最有效的方法是什么?
A:
使用 enum 枚举类:
public enum Foo {
    INSTANCE;
}
复制代码
Joshua Bloch 在 Google I / O 2008 上的 Effective Java reloaded 演讲中提到了这个方法:可以看看他的演讲视频,另外可以参考下他演讲的 PPT 的第 30-32 页的部分。
实现可序列化单例的正确方法
public enum Elvis {
    INSTANCE;
    private final String[] favoriteSongs =
        { "Hound Dog", "Heartbreak Hotel" };
    public void printFavorites() {
        System.out.println(Arrays.toString(favoriteSongs));
    }
}
复制代码
这种方法在功能上类似于 public 字段,它除了更简洁外,还自带序列化机制,并且即使面对复杂的序列化或反射攻击,也提供了针对多重实例化的明确保证。尽管这种方法尚未得到广泛采用,但是单元素枚举类型是实现单例的最佳方法。
Other
看看其他创建单例模式的方法:
- 
双重检查锁
public class DoubleCheckedLockingSingleton { private static volatile DoubleCheckedLockingSingleton INSTANCE; private DoubleCheckedLockingSingleton() {} public static DoubleCheckedLockingSingleton getInstance() { if(INSTANCE == null) { synchronized(DoubleCheckedLockingSingleton.class) { // Double checking Singleton instance if(INSTANCE == null) { INSTANCE = new DoubleCheckedLockingSingleton(); } } } return INSTANCE; } } 复制代码 - 
静态工厂方法
public class Singleton { // Initialized during class loading private static final Singleton INSTANCE = new Singleton(); // To prevent creating another instance of 'Singleton' private Singleton() {} public static Singleton getSingleton() { return INSTANCE; } } 复制代码 
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
    






















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)