什么是单身模式?为什么以及何时应该使用它?

时间:2017-07-25 05:07:36

标签: java

我是一名经验丰富的java开发人员。 我的问题是:什么是单身人士?似乎我从未在我的项目中使用它(Java web,Spring boot)。 我只是不明白为什么以及何时应该使用单身人士。 对不起伙计们,让我解释一下我的困惑。 一个简单的单例类看起来像这样:

class Singleton {

  private static Singleton instance;

  private Singleton(){
  }

  public static Singleton getInstance(){
     if(instance=null){
        instance=new Singleton();
     }

     return instance;
  }
  ........
}

当我想要新建一个单例对象时,看起来没有区别:     Singleton s = new Singleton();

1 个答案:

答案 0 :(得分:1)

单例模式使您可以控制可以实例化的单例类的实例数。它被用于许多用例。

经典的Java单例看起来就像你提到的一个非常重要的细节 - 非公共构造函数。

构造函数不是公共的(受保护的或私有的)这一事实不允许任何人按照你的建议创建一个新的单例实例:

Singleton singleton = new Singleton();

这与仅仅是普通班级有很大的不同。

请注意,这样的实现不是线程安全的,因此您要么将其初始化为线程安全或非延迟,如下所示:

  • 非延迟初始化

    public class Singleton {
        private static Singleton instance = new Singleton();
    
        private Singleton(){
        }
    
        public static Singleton getInstance(){
            return instance;
        }
    }
    
  • 线程安全

    public class Singleton {
        private static Singleton instance = null;
    
        protected Singleton() {
        }
    
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }