java – 这个类是单身吗?

前端之家收集整理的这篇文章主要介绍了java – 这个类是单身吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
下面列出的类是单身人士吗?由于构造函数被声明为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;
  }
}

解决方法

你可以把它变成单身,但是你需要找到另一种方法将模拟器注入其中.

在当前实现中,模拟器是在第一次有人调用构造函数时设置的.该构造函数非常奇怪,因为它设置了一个静态字段.它还将立即打开一个连接,与单例实例使用的连接分开.

如果在构造函数至少调用一次之前调用了getInstance()方法,则永远不会设置模拟器.

要使它成为一个合适的单例,你可以删除构造函数添加一个私有的无参数构造函数.您还需要一个静态setSimulator()方法来设置静态字段,并确保在需要与模拟器进行任何其他交互之前调用它.

如果您在单例之间存在依赖关系,我建议您使用Inversion-of-Control模式,其中IoC容器创建服务对象并将它们连接在一起.

猜你在找的Java相关文章