当类扩展另一个类时,如何使用enum强制Singleton模式



Joshua Bloch说使用枚举是实现singleton的最佳方式:

public enum Elvis {
    INSTANCE;
    void someMethod(){
        // implementation
    }
}

然而,枚举不能extends,所以我想我将不得不避免使用这种方法,或者有办法做到这一点吗?

由于枚举只是一个类,您可以让它包含您想要的任何内容(包括您想要的"扩展"类的单个实例),并只公开它。您可以使用枚举控制任何内容的singleton特性。

public enum Elvis {
    INSTANCE;
    private Object wrappedObject = new Object();

    public Object wrappedObject(){ return wrappedObject; }

    public static void main(String args[]){
        Object sortaSingledton = INSTANCE.wrappedObject();//there still can be only one
    }
}

最新更新