Java中的单例和继承
我有一个基类捕捉两个类通用的一些功能。 换句话说,我可以创建一个基类,并且创建这个基类的这两个类的子类。 但是,对于这些子类中的每一个,可以创建的实例数为1(即每个子类都必须是单例)。 我搜索了一下,发现这方面正在进行一场合理的辩论。 虽然有几种解决方案可用,但我不确定它们是否适合我的情况。
任何人都可以告诉我我应该如何设计这个?
您可以将每个类分别制作为单例,并使基类变为抽象。 不知道什么是辩论 - 一般来说,单身人士并不是一个好主意?
使用抽象工厂模式。 有一个单独的类,其中包含用于检索单例的方法,并让它保存对实例变量或地图中单例的引用。
您可能不希望增加复杂性,但创建像Spring这样的框架来解决这些问题(等等)。
看起来Pico Container仍然活着,而且它可能是最简单但仍然可靠的解决方案。 看看控制主题的反转,并让框架在需要它们的地方注入单例。
总之,不要试图让单身人士管理自己的访问权限。 委托其他事情。
拥有复杂继承的单例类没有任何内在的错误。 实际上,具有私有构造函数的类层次结构(无实例)在许多情况下非常有用。 您只需决定如何管理单身人士的两个重要方面:创建和访问。
我不知道你是否需要一个例子,但我试了一下。 不知道你的任何细节,这个例子非常模糊。 我也在这里学习,所以让我们知道你最终实现了什么。
基类:
public abstract class BaseClass {
public void someMethod() {
System.out.println("base class hello: " + this);
}
public abstract void someOtherMethod(String value);
}
其中一个子类:
public class SubClassOne extends BaseClass {
private static SubClassOne instance;
private SubClassOne() {}
public static SubClassOne getInstance() {
if (instance == null) {
instance = new SubClassOne();
}
return instance;
}
public void someOtherMethod(String value) {
someMethod();
System.out.println("sub class hello: " + value + " " + this);
}
public static void main(String[] args) {
SubClassOne one = SubClassOne.getInstance();
SubClassOne two = SubClassOne.getInstance();
SubClassOne three = SubClassOne.getInstance();
SubClassOne four = SubClassOne.getInstance();
one.someOtherMethod("one");
two.someOtherMethod("two");
three.someOtherMethod("three");
four.someOtherMethod("four");
}
}
链接地址: http://www.djcxy.com/p/5747.html