单身的目的以及为什么我们需要私有构造函数

时间:2017-04-05 09:56:25

标签: java singleton

我是JAVA的新手。

当我读到有关单例模式时,需要先运行一个实例。

类似的东西:

public class Singleton {

    private static final Singleton instance = new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
        return instance;
    }

}

但我也写了类似的东西:

public class Singleton {


    public Singleton(){}
    //methods,....

}

所以我有一些问题:

1)为什么我们需要单例实例?目的是什么? 2)为什么单例中的构造函数是私有的?我们如何为这个班级初始化输入?

我知道我的问题非常基本,听到这样的声音。

但请帮我解释一下。

谢谢&最诚挚的问候

2 个答案:

答案 0 :(得分:1)

1)Singleton模式是一种设计模式,在程序的生命周期中,您只有一个实例,即一个对象。因此,您将实例设置为静态并初始化一次,这样程序中只有一个对象。

2)构造函数必须是私有的,因此您不需要根据需要初始化对象。也就是说,当构造函数是私有的时,你不能调用new Singleton(),因为你不能从类外部访问构造函数,因为它是私有的。您可以通过创建一个静态方法来初始化输入,该方法接受一些参数并在构造唯一实例时创建它们

例如,请考虑以下内容

public class Singleton {

    private static Singleton instance;

    private String a;
    private String b;

    private Singleton(){}

    private Singleton(String a, String b) {
         this.a = a;
         this.b = b;
    }

    public static Singleton getInstance(String a, String b){
        if (instance == null)
            instance = new Singleton(a, b);
        return instance;
    }

}

希望这有帮助!

答案 1 :(得分:0)

不要在单例中使用公共构造函数。 单例的意思是你只有一个该类的实例。因此,如果您有公共构造函数,则无法保证只有一个实例。 你有私有构造函数,只在该类中调用一次,所以你只有一个实例。您可以通过getInstance-Method提供该实例。