你怎么知道单身模式中的哪个实例

时间:2017-09-29 09:41:47

标签: java

我有一个代码ManagerService,可以打印实例boss1和boss2。两者都具有相同的哈希码。我怎么才能知道哪个boss是boss1还是boss2。我无法说出来,因为实例是相同的,因此哈希码是相同的。如何知道是哪个老板。

   public class ManagerService {

    private static ManagerService managerservice;

   private ManagerService(){
    System.out.println("manager created");
     }


   public static ManagerService getInstance() {

    if (managerservice==null){
        managerservice = new ManagerService();
      }

        return managerservice;
    }

  public void doWork(){
      System.out.println("Manager is working");
      System.out.println(managerservice.hashCode());
     }
    }

测试类

 public class ManagerServiceTest {

   public static void main(String[] args) {

    ManagerService boss1 =  ManagerService.getInstance();
    boss1.doWork();

    ManagerService boss2 = ManagerService.getInstance();
    boss2.doWork();


    }

}

2 个答案:

答案 0 :(得分:5)

单例模式的想法是存在单个对象。您只有一个ManagerService对象,您可以通过

自行查看
System.out.println(boss1 == boss2);

将打印true,表示它们是完全相同的单个对象。

至于boss1boss2,它们只是变量名称。就像你的母亲可能会把你称为"我的宝贝"而你的父亲就是那个小小的孩子,只有你们中的一个人。

答案 1 :(得分:0)

单例模式的整个想法是只有这个类的一个实例。所以很自然他们会有相同的hashCode()。请注意,尽管在多线程环境中的实现中,您可以创建多个实例。所以你应该使用锁来防止这种情况发生。您还需要将构造函数设为私有。