Java:来自基类的单例

标签 java design-patterns singleton

假设我们有基类:

public class Base {
      public Base(int i) {
      /* ... */
      }
      /* ... */
}

我们要基于这个类创建单例。问题是类有公共(public)构造函数,所以扩展它会导致单例也有公共(public)构造函数:

public class SingletonBase extends Base {
   private static final SingletonBase _instance = new SingletonBase();

   private SingletonBase() {
      super(0);
   }

  public SingletonBase(int i) {  // Want to avoid this!
     super(i) 
  }

  public static void getInstance() {
     return _instance;
  }
  /* ... */       
}

Singleton当然不能有public构造函数,所以我们要避免这种情况。 那么,什么是最优雅的方式/模式来让适当的 Singleton 具有 Base 类的功能?

编辑:禁止修改基类,因为它来自外部库。

最佳答案

构造函数不是继承的。所以只是
删除这部分,你会得到你需要的。

public SingletonBase(int i) {  // Want to avoid this!
    super(i) 
}

此外,您可能需要创建 Base
抽象以便任何人都不会错误地实例化它
通过直接调用 Base 构造函数。

public abstract class Base {
    public Base(int i) {
        /* ... */
    }
    /* ... */
}

public class SingletonBase extends Base {
    private static final SingletonBase _instance = new SingletonBase();

    private SingletonBase() {
        super(0);
    }

    public static SingletonBase getInstance() {
        return _instance;
    }
    /* ... */
}

关于Java:来自基类的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665410/

相关文章:

java - plsql中如何检查列值是否为空?

java - 回答 从 1 个 Android 应用程序访问另一个应用程序的相同数据

c++ - Proxy 是否适合创建演示模式?

c++ - 设计模式会破坏抽象吗?

asp.net-mvc - ASP.NET MVC3 - 3 Tier design - 事务控制和业务层设计问题

java - 根据 Spring 中的输入返回 Singleton bean

c++ - 线程安全单例实现 : whats wrong?

java - dao 作为 servlet 的成员 - 正常吗?

java - 处理 3.0 PVector.get()

java - 有没有办法混合 AndroidX 和使用支持库的子项目?