编程语言
首页 > 编程语言> > 单例设计模式java idioma

单例设计模式java idioma

作者:互联网

参见英文答案 > Why private static field = new Singleton is not lazy in Java?                                    2个
我很困惑.我在java中发现了许多Singleton Design Pattern的实现.我发现的其中一个实现如下:

public class MySingleton {

    private static class Loader {
        static MySingleton INSTANCE = new MySingleton();
    }

    private MySingleton () {}

    public static MySingleton getInstance() {
        return Loader.INSTANCE;
    }
}

如下所述:https://stackoverflow.com.
现在,如果这个实现应该工作,为什么不以下?

public class MySingleton {

    private static final MySingleton INSTANCE = new MySingleton();

    private MySingleton () {}

    public static MySingleton getInstance() {
        return INSTANCE;
    }
}

我搜索了java如何处理初始化,但找不到任何显示后面的代码将无法正常工作.
相反,我发现了以下内容:stackoverflow.com,它指出每个静态初始化都发生在调用类的静态方法之前,因此当调用访问INSTANCE(getInstance)的唯一方法时,应该初始化持有单例实例的静态字段.
所以,是的,我真的很困惑:如果这段代码有效,为什么不使用这个简单版本的单例设计模式呢?

解决方法:

这两个工作都是单身人士的有效实施.
第一个使用延迟初始化.
这意味着仅在客户端调用getInstance()时才创建单例.
第二个使用急切的初始化.
这意味着只要类加载器加载MySingleton类就会创建单例.

实际上,它并没有太大的区别,因为通常getInstance()和单例类加载通常是耦合的.
确实很少有一个客户端类引用单例类而不通过getInstance()请求它的实例.

因此,在一般情况下,应该更倾向于更简洁的第二种方式(急切初始化).

标签:java,idioms,design-patterns,singleton
来源: https://codeday.me/bug/20190527/1163429.html