java在类层次结构中强制执行单例

时间:2015-11-21 02:14:19

标签: java oop

在Java中,有没有办法强制实现我的界面是单例?我想要确保的接口是由具有单个实例的类实现的 - 这是我可以用抽象类做的事情吗?

编辑:更多上下文

我正在实现一个框架,该框架定义了一个平台接口,我只需要每个实现的实例,因为它将被大量使用。

1 个答案:

答案 0 :(得分:1)

我可以在那里向你展示一个肮脏的伎俩:

static public abstract class SingletonAbc {
    static private final HashSet<Class<?>>  mInstancedClasses   = new HashSet<>();

    public SingletonAbc() { // CTOR should be thread-safe imo, check that to be sure
        final Class<?> c = getClass();
        System.out.println("Checking Class: " + c.getName());
        if (mInstancedClasses.contains(c)) throw new IllegalStateException("Damn, cannot instantiate the class " + c.getName() + " twice!");
        else mInstancedClasses.add(c);
    }
}

static public class Ext1 extends SingletonAbc {}
static public class Ext2 extends SingletonAbc {}
static public class Ext1Ext1 extends Ext1 {}
static public class Ext1Ext2 extends Ext1 {}

public static void main(final String[] args) {
    new Ext1();
    new Ext2();
    new Ext1Ext1();
    new Ext1Ext2();
    new Ext2(); // <= bam! exception!
}

但请记住,这可能不是最佳解决方案。多线程和反射等因素可能会破坏这种方法。