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

上一篇: singleton and inheritance in Java

下一篇: Clojure algebraic data types