我有两个类(D和E)有一些常用的方法,唯一的区别是 D实例化单例(A),E实例化另一个单例(B)。
E继承自D,并且由于方法执行相同的代码,我想检查D是否应该创建A或B单例,以便不在E中重写每个常用方法的相同代码...
A和B从C抽象类继承......
有任何建议吗?
提前致谢...
//Check subtype
if ....
A field = A.getInstance().getMethod();
else...
B field = B.getInstance().getMethod();
field.set...
答案 0 :(得分:3)
我认为最好的解决方案是创建一个接口C
并使A
和B
实现此接口。在接口中声明要在D
和E
中使用的方法,例如: G:
public interface C {
public void setThatImportantField(String value);
}
在D
中,添加一个创建单例实例的方法:
protected C createSingletonInstance() {
return new A();
}
在E
中,覆盖此方法并返回B
的新实例。在D
中的初始化代码中,您现在可以使用界面中定义的方法:
protected void initSingleton() {
C singleton = createSingletonInstance();
singleton.setThatImportantField("test");
}
答案 1 :(得分:0)
我能给出的最佳建议:阅读有关OO设计的好书。
更重要的是,只有当父子之间的真实关系是“是一种”关系时,才应该使用继承。代码重用可以通过其他方式实现(例如,两者都使用的实用程序类)。
您可以在D中创建一个只创建单例并使用它的方法。在D中以一种方式实现它,并用E。
中的另一个实现覆盖它答案 2 :(得分:0)
制作创建单例参数的方法并仅使用单个类(而不是D和E)来完成这项工作不起作用?