shi*_*ang 6 java design-patterns
下面列出的类是单身人士吗?由于构造函数被声明为public,我可以推断该类是一个错误实现的单例吗?
public class CreateDevice extends Functionality{
private static Simulator simulator;
ConnectionDB connect = ConnectionDB.getInstance();
public CreateDevice(Simulator simulator){
this.simulator = simulator;
}
private static CreateDevice instance;
synchronized public static CreateDevice getInstance() {
if(instance == null){
instance = new CreateDevice(simulator);
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将其设置为单例,但是您需要找到其他方法将模拟器注入其中。
在当前的实现中,模拟器是在第一次调用构造函数时设置的。该构造函数非常奇怪,因为它设置了一个静态字段。它还会立即打开一个连接,与单例实例使用的连接分开。
如果在调用构造函数之前调用 getInstance() 方法至少一次,则永远不会设置模拟器。
为了使其成为正确的单例,您可以删除构造函数并添加一个私有的无参数构造函数。您还需要一个静态 setSimulator() 方法来设置静态字段,并确保在需要与模拟器进行任何其他交互之前调用它。
如果单例之间存在依赖关系,我建议采用控制反转模式,其中 IoC 容器创建服务对象并将它们连接在一起。