java - 在 java 中具有子类化的单例

标签 java design-patterns singleton

在 java 中实现单例的最常见方法是使用具有以下形式的公共(public)访问器方法的私有(private)构造函数 --

public class Singleton {
    private static Singleton instance = null;
    private Singleton() {

    }
    public static synchronized Singleton getInstance(){
        if (instance == null) {
        instance = new Singleton();         
        } 
        return instance;
    }
}

但是,由于构造函数是私有(private)的,因此它阻止了对单例的子类化。有什么方法可以创建允许子类化的单例吗?

最佳答案

当您有一个 class A extends B 时,A 的实例本质上“包含”B 的实例。所以继承的概念与单例模型是相反的。

根据您的需要,我会考虑使用组合/委托(delegate)。 (A 将引用单例,而不是扩展其类)。如果出于某种原因需要继承,请使用 Singleton 方法创建一个接口(interface),让 Singleton 实现该接口(interface),然后让另一个类也实现该接口(interface),并委托(delegate)给单例来实现相关方法。

关于java - 在 java 中具有子类化的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8549825/

相关文章:

java - Scala Play 框架 : logger pattern for displaying file and line

java - 在Java中实现单例模式与工厂模式相结合的最佳方式是什么?详细描述

php - 使用 Ajax 调用同一个文件中的 PHP 对象方法

Android Activity Lifecycle和Singleton以及相互引用持久化(内存泄漏)

java - m2Eclips 集成错误

java - 如何从 Wicket 中的 Java 文件动态添加 HTML 代码?

java - 创建 java 可执行文件

java - Kotlin中如何避免重载冲突?

java - 涉及交叉类型转换的设计模式的名称

java - 跟踪复杂过程的部分结果的设计模式