我正在研究单例模式,并且看到了以下示例以了解该模式:
public class SingleTonClass {
//Static Class Reference
private static SingleTonClass obj=null;
private SingleTonClass(){
/*Private Constructor will prevent
* the instantiation of this class directly*/
}
public static SingleTonClass objectCreationMethod(){
/*This logic will ensure that no more than
* one object can be created at a time */
if(obj==null){
obj= new SingleTonClass();
}
return obj;
}
public void display(){
System.out.println("Singleton class Example");
}
public static void main(String args[]){
//Object cannot be created directly due to private constructor
//This way it is forced to create object via our method where
//we have logic for only one object creation
SingleTonClass myobject= SingleTonClass.objectCreationMethod();
myobject.display();
}
}
我听不懂这行:
private static SingleTonClass obj=null;
或此行:
public static SingleTonClass objectCreationMethod()
这是我第一次看到方法的声明包含类的名称。 我需要对这两行进行详细说明。
答案 0 :(得分:2)
此行
private static SingleTonClass obj=null;
声明相同类类型SingleTonClass
的 static 变量。
以上声明是实现单例类的标准方法,因为此静态变量是仅引用Singleton类的一个对象的唯一变量,我们将允许创建该对象,同时将构造函数声明为{ {1}},因此没有其他类可以使用private
运算符创建此类的对象。
这行,
new
是创建Singleton类的另一个链接,其中此方法控制Singleton类对象的创建和检索。
就像我上面说的那样,Singleton类的构造函数是私有的,因此现在我们需要某种方法来创建或检索Singleton类对象,而此方法正是这样做的。通常也将其声明为public static SingleTonClass objectCreationMethod()
,而将其声明为getInstance()
。为什么要使用公共静态,以便public static
可以访问此Singleton类的对象,而对于您的类,它将是Classname.getInstance()
希望这可以澄清。
答案 1 :(得分:0)
private static SingleTonClass obj=null;
这是SingleTonClass对象,您可以看到它是私有的,因此您不能修改该值,通常您会这样做
SingleTonClass obj = new SingleTonClass();
创建和对象,但是在这种情况下,构造方法必须是私有的,因此您根本无法创建此类的对象,唯一的方法是通过此方法
public static SingleTonClass objectCreationMethod()
是静态的,因为您不能做SingleTonClass obj = new SingleTonClass();
您可以通过这种简单的方式访问
SingleTonClass myobject= SingleTonClass.objectCreationMethod();