gpt4 book ai didi

java - 如何继承单例

转载 作者:行者123 更新时间:2023-12-01 12:03:43 25 4
gpt4 key购买 nike

有时需要继承单例,但因为在单例中您使用的是无法覆盖的静态引用和静态方法。

例如(Java):

public class Singleton {
private static Singleton instance = null;

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

如果我用“SingletonChild”类继承“Singleton”,我将无法通过调用 getInstance() 方法生成实例。如果我将创建另一个 getInstanceChild() 方法,则基本方法: getInstance() 也将被公开。

最佳答案

您可以使用适配器模式并用另一个对象包装单例。如果您还让单例和适配器共享一个接口(interface),那么调用代码不必知道正在传递哪一个。

interface MyInterface{
String foo();

void bar();
}

public class Singleton implements MyInterface{
//..same as before

}


public class Adapter implements MyInterface{
private MyInterface delegate;

public Adapter(MyInterface adaptMe){
//check for null in real code
this.delegate = adaptMe;
}

//delegate to bar
public void bar(){
delegate.bar();
}

//override foo
public String foo(){
return "AdaptedFoo";
}
}

然后你的代码可以包装单例

MyInterface myInterface = new Adapter(Singleton.getInstance());

关于java - 如何继承单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com