1

我有两个具有一些通用方法的类(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...
4

3 回答 3

3

我认为最好的解决方案是创建一个接口C并制作AB实现这个接口。声明要在接口中DE接口中使用的方法,例如:

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");
}
于 2013-10-28T09:21:33.453 回答
0

使创建单例参数的方法只使用一个类(而不是 D 和 E)来完成这项工作是行不通的?

于 2013-10-28T09:24:26.670 回答
0

我能给出的最佳建议:阅读有关 OO 设计的好书。

更重要的是,只有当父子之间的真正关系是“是”关系时,才应该使用继承。代码重用可以通过其他方式实现(例如,两者都使用的实用程序类)。

您可以在 D 中创建一个仅创建单例并使用它的方法。在 D 中以一种方式实现它,并在 E 中用另一种实现覆盖它。

于 2013-10-28T09:19:13.723 回答