ala*_*ine 3 java singleton constructor
请告诉我两种java构造函数声明方式的区别
public class A{
private static A instance = new A();
public static A getInstance() { return instance;
}
public static void main(String[] args) {
A a= A.getInstance();
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class B{
public B(){};
public static void main(String[] args) {
B b= new B();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
bak*_*kal 11
A应该是Singleton,其中只能有一个A实例.通过调用检索该单个实例getInstance();在软件工程中,单例模式是一种设计模式,用于通过将类的实例化限制为一个对象来实现单例的数学概念.当需要一个对象来协调整个系统的操作时,这非常有用.
根据您的要求,有几种方法可以解决这个问题:
public class A{
private static A instance = new A();
private A(){} // private constructor
public static A getInstance() {return instance;}
}
Run Code Online (Sandbox Code Playgroud)
或者在第一次调用之前不创建实例
public class A{
private static A instance = null;
private A(){} // private constructor
public static A getInstance() {
if(instance == null){
instance = new A(); // create the one instance.
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
B是一个带有无参数构造函数的类.您可以通过调用创建任意数量的B实例new B();看起来A是尝试实现单例模式,但它不太正确 - 它应该有一个私有构造函数:
class A {
private static final A INSTANCE = new A();
private A() { }
public static A getInstance() { return INSTANCE; }
}Run Code Online (Sandbox Code Playgroud)
这确保了应用程序中只存在一个A实例 - 如果任何其他对象需要使用A的实例来执行某些操作,则唯一可以通过该getInstance()方法获取一个实例,该方法始终返回相同的实例.
使用B,您可以根据需要/期望拥有尽可能多的B实例,如果选择,任何其他对象都可以自由创建B的新实例.
| 归档时间: |
|
| 查看次数: |
3284 次 |
| 最近记录: |