为什么Object在Singleton模式中成为static
?
它的实际用途是什么?
如果我们不让对象静止会发生什么?
public class SingleObject {
//create an object of SingleObject
private static SingleObject instance = new SingleObject();
//make the constructor private so that this class cannot be
//instantiated
private SingleObject(){}
//Get the only object available
public static SingleObject getInstance(){
return instance;
}
public void showMessage(){
System.out.println("Hello World!");
}
}
答案 0 :(得分:3)
您通常将Singleton类的单个实例保存在该类的静态变量中。这不会使该实例成为静态。只有对它的引用是静态的。
由于您只能通过类的静态方法获取该单个实例(您无法通过构造函数显式构造Singleton类的实例 - 否则它不会是单例),对该实例的引用必须存储在静态变量中。
答案 1 :(得分:1)
只需添加/详细说明eran的答案,由于getInstance方法是静态方法,因此可以使用类名从Single方法或其他方法中调用getInstance方法,即使用SingleObject.getInstance();。这意味着您将不需要对象引用来调用getInstance()
如果它是实例方法,则需要一个对象来调用getInstance。现在无法在类外创建SingleObject类的对象(因为构造函数是private),这是真正的麻烦。
结论1: 这意味着我们需要一个静态方法。
结论2: 因为实例属性在静态方法中不可用,所以需要具有静态方法,使属性为静态。
答案 2 :(得分:0)
如果我们不使对象静态化,会发生什么?
这意味着getInstance
方法必须是非静态的,因为静态方法不能引用当前类 1 中的非静态变量。
但是getInstance
方法必须是 static
...否则此API设计没有意义 2 。
1-...除非传递了对该对象的引用,否则在这种情况下将不起作用。
2-您需要对单例实例的引用才能获取对单例实例的引用。但是您不能创建该实例,因为该类是私有的……阻止某人创建第二个实例。