【问题标题】:Android Java: Choose dynamically a subtype classAndroid Java:动态选择子类型类
【发布时间】:2013-10-28 09:11:08
【问题描述】:
我有两个类(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...
【问题讨论】:
标签:
java
android
inheritance
singleton
【解决方案1】:
我认为最好的解决方案是创建一个接口C 并让A 和B 实现这个接口。在接口的D和E中声明你要使用的方法,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");
}
【解决方案2】:
我能给出的最佳建议:阅读有关 OO 设计的好书。
更重要的是,只有当父子之间的真正关系是“是”关系时,才应使用继承。代码重用可以通过其他方式实现(例如,两者都使用的实用程序类)。
您可以在 D 中创建一个只创建单例并使用它的方法。在 D 中以一种方式实现它,并在 E 中用另一种实现覆盖它。
【解决方案3】:
制作创建单例参数的方法并仅使用单个类(而不是 D 和 E)来完成这项工作是行不通的吗?