Android Java:动态选择子类型

时间:2013-10-28 09:11:09

标签: java android inheritance singleton

我有两个类(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...

3 个答案:

答案 0 :(得分:3)

我认为最好的解决方案是创建一个接口C并使AB实现此接口。在接口中声明要在DE中使用的方法,例如: 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)来完成这项工作不起作用?