我正在尝试使用静态工厂方法创建一个具有单例属性的类。
package ishan.Beans;
public class ControlManager {
private static ControlManager controlManager=null;
private double id;
private ControlManager()
{
this.id=Math.random();
}
public static ControlManager getControlManager()
{
if(null==controlManager)
return new ControlManager();
return controlManager;
}
public double getId() {
return id;
}
}
package ishan.Beans;
public class Usage {
public static void main(String a[])
{
ControlManager cManager=ControlManager.getControlManager();
ControlManager c=ControlManager.getControlManager();
System.out.println(c);
System.out.println(cManager);
}
}
每次运行此代码时,我都会在c和cManager中获得不同的ControlManager实例。我无法弄清楚问题或我做错了什么。
答案 0 :(得分:1)
您没有保存您创建的新实例...您的代码是:
public static ControlManager getControlManager() { if(null==controlManager) return new ControlManager();
但应该是:
public static ControlManager getControlManager() {
if(controlManager == null) {
controlManager = new ControlManager();
return controlManager;
}
答案 1 :(得分:0)
更改您的getControlManager()
:
这
return new ControlManager();
到
controlManager = new ControlManager();
这就是它最终应该是什么样子:
public static ControlManager getControlManager() {
if(controlManager == null) {
controlManager = new ControlManager();
}
return controlManager;
}
此外还有一些基于意见的观点,但是以各种惯例为依据:
在编写条件语句(if
)时,条件的顺序应该坚持自然地说出语句的方式。例如:
if (null == contorlManager)
if (controlManager == null)
这背后的原因或目标是保持代码的可读性。没有人问:"交通灯是绿色的吗?"。
有关详细信息,请参阅Yoda Conditions
答案 2 :(得分:0)
您的代码应更改为:
public static ControlManager getControlManager() {
if(controlManager == null)controlManager = new ControlManager();
return controlManager;
}
祝你好运!!!