我想在父类的任何扩展类上强制实现单例模式。也就是说,我只希望每个子类都有一个实例(可以通过Child.INSTANCE或类似的方式访问)。
理想情况下,我希望创建Child.INSTANCE对象,然后不创建其他类型为Parent的对象。
目前,我通过如下方式获取实例:
public class Child extends Parent {
public static final Child INSTANCE = new Child();
....我想知道,java类能以某种方式成为静态类吗?
谢谢=]
发布于 2011-01-04 00:30:08
你的子类的集合是固定的吗?如果是这样,请考虑使用enum。
public enum Parent {
CHILD1 {
// class definition goes here
},
CHILD2 {
// class definition goes here
};
// common definitions go here
}由于OP提到了状态模式,下面是enum-based状态机的两个示例:a simple one和a complex one。
发布于 2011-01-04 00:32:11
这是可以做到的,但我看不出有什么意义。您最好使用枚举IMHO。
enum {
Singleton,
Child { /* override methods here * }
}但是,为了回答您的问题,您可以执行以下操作
class SingletonParent {
private static final Set<Class> classes = new CopyOnArraySet();
{ if (!classes.add(getClass()) throw new AssertionError("One "+getClass()+" already created."); }
}发布于 2011-01-04 00:32:56
您看到的是错误的设计模式。
看一看工厂模式。工厂可以创建类的单个实例,然后将其分发给任何需要它的人。工厂可以分发父类、任何子类或您想要的任何其他元素的单例。
https://stackoverflow.com/questions/4586194
复制相似问题