我们怎样才能确保我们只能创建一个类的实例?

时间:2015-03-09 10:26:18

标签: java class design-patterns instance

这是一个面试问题。面试官向我介绍了一个班级人员和另一个班级社区。他想知道我们可以做些什么来确保在Class社区中,Class Person的实例可以被调用一次。

我的方法是将布尔标志定义为全局变量,如果标志值为false,则检查类Person的构造函数,然后它将创建实例或返回错误。通过创建Class Person的第一个实例,此标志值更改为true。他似乎对答案不太满意。

我知道这可能不是正确的做法。问题是,有没有办法使用类定义或特定类型的类?

2 个答案:

答案 0 :(得分:3)

对于所有的辛格尔顿命题,我并不是真的很感兴趣。

我会回答同样的问题。但真正的问题似乎是“如何让这个人在社区中独一无二”,这与“如何让我们能够一劳永逸地实现人类”不同。

在这种情况下,我会做一些非常不同的事情。

我会在社区内声明一组人并覆盖Person的等于方法。

然后,在社区内,Person将是唯一的,但Person类仍然可以为其他社区实例实例化。

public class Person{
   ...
    public Boolean equals(Object o){
       Person p = (Person) o;
       //you own equals logic
       return isEqual;
    }
    ...
}


public class Community{
    ...
    private Set<Person>;
    ...
}

答案 1 :(得分:1)

您使用Singleton Pattern

public class Singleton {
    // Private constructor. Prevents instantiation from other classes.
    private Singleton() { }

    private static class SingletonHolder {
            private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
            return SingletonHolder.INSTANCE;
    }
}

或者将您的课程设为enum类型,使其成为真正的单身人士:

public enum Singleton {
    INSTANCE;
    public void execute (String arg) {
        // Perform operation here 
     }
}