扩展单身是错误的吗?

问题描述 投票:0回答:1

Singleton的概念(至少在Java中是这样说的,它必须使用私有构造函数来实现,对吗?例如:

public class Singleton {

    private static Singleton uniqueInstance;

    private Singleton() {
    }

    public static synchronized Singleton getInstance() {
        if (uniqueInstance == null)
            uniqueInstance = new Singleton();

        return uniqueInstance;
    }

但是,如果我们忽略这个事实并使用受保护的构造函数来执行,他会不会成为单身人士?在这种情况下,我在互联网上看到了一些示例。

public class Singleton {

    private static Singleton singleton;

    protected Singleton() {
    }

    public synchronized static Singleton getInstance() {

    if (singleton == null) {

        int tipoDoSingletonParaInstanciar = leUmArquivoTexto();

        if (tipoDoSingletonParaInstanciar == 1) {
        singleton = new SingletonSubclasse1();
        } else if(tipoDoSingletonParaInstanciar == 2) {
        singleton = new SingletonSubclasse2();
        } else {
        singleton = new Singleton();
        }
    }

    return singleton;
    }

    public void metodoQuePodeSerSobrescrito() {
    System.err.println("Singleton.metodoQuePodeSerSobrescrito()");
    }
}

并且如果受保护的构造函数本身不是问题……继承单例,并不意味着其子类可以创建父级的多个实例?它不会破坏概念吗?

是否有可能继承Singleton而不会破坏其概念(阻止)?

java singleton
1个回答
1
投票

您在那里创建了多个对象,这意味着它不再是单例了。如果这样做的话,您将打破单例的概念。

© www.soinside.com 2019 - 2024. All rights reserved.