加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 这个类是单身吗?

发布时间:2020-12-14 05:39:23 所属栏目:Java 来源:网络整理
导读:下面列出的类是单身人士吗?由于构造函数被声明为public,我可以推断该类是一个错误实现的单例吗? public class CreateDevice extends Functionality{ private static Simulator simulator; ConnectionDB connect = ConnectionDB.getInstance(); public Crea
下面列出的类是单身人士吗?由于构造函数被声明为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容器创建服务对象并将它们连接在一起.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读