gpt4 book ai didi

java - MySingleTon st = MySingleTon.getInstance(); 是什么意思?这段代码的意思是?

转载 作者:行者123 更新时间:2023-12-01 18:36:08 25 4
gpt4 key购买 nike

今天我正在阅读一个示例java程序来创建一个单例类。代码如下:

public class MySingleTon {

private static MySingleTon myObj;
/**
* Create private constructor
*/
private MySingleTon(){

}
/**
* Create a static method to get instance.
*/
public static MySingleTon getInstance(){
if(myObj == null){
myObj = new MySingleTon();
}
return myObj;
}

public void getSomeThing(){
// do something here
System.out.println("I am here....");
}

public static void main(String a[]){
MySingleTon st = MySingleTon.getInstance();
st.getSomeThing();
}
}

我不明白这段代码 MySingleTon st = MySingleTon.getInstance(); 的含义是什么?我的意思是我们正在通过 MySingleTon st 创建一个对象 st;所以它应该被写成new MySingleton。那么 MySingleTon.getInstance(); 实际上在做什么?

最佳答案

so it should have been written as new MySingleton.

如果您注意到 getInstance() 方法,则仍然仅使用 new 创建实例。

So what is MySingleTon.getInstance(); doing actually?

它调用 getInstance() 方法,该方法是 MySingleton 类的 static 方法。该方法返回 MySingleton 类的新实例或现有实例(如果已存在)。基本上,getInstance() 是一个工厂方法。

这就是单例模式的实现方式。如果您使用 new 关键字创建 Singleton 类的实例,那么您可以创建任意数量的实例,这使得该类成为非单例类。这就是该类的构造函数是私有(private)的原因。您当前可能能够调用构造函数,因为您的 main 方法仅位于该类中。尝试将 main() 方法移到不同的类中,这样会更清晰。

现在该单例遇到了一些问题。你不应该真正以这种方式实现单例。其一,它不是线程安全的。其次,它不是序列化安全的。从某种意义上说,当您序列化和反序列化它的实例时,将创建一个新实例。理想情况下,您应该完全避免使用 Singleton,因为它是邪恶的。但无论何时,实现单例模式的最佳方法都是使用enum:

enum Singleton {
INSTANCE;
}

关于java - MySingleTon st = MySingleTon.getInstance(); 是什么意思?这段代码的意思是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21941883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com