【问题标题】: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 并让AB 实现这个接口。在接口的DE中声明你要使用的方法,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)来完成这项工作是行不通的吗?

        【讨论】:

          猜你喜欢
          • 2018-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-25
          • 2014-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多