如何将功能实现为两个不相关的类

时间:2014-04-01 02:09:57

标签: java oop

我被分配到一个项目,我的工作是为现有系统实现一个功能。此功能需要添加到两个单独的类中。这两个类都扩展了相同的超类,但将该特性添加到这个超类是没有意义的。我可以在没有太多代码重复的情况下将相同的功能实现到这两个单独的类中的最佳方法是什么。简单的方法是将这个功能实现到静态类中,然后在需要这些额外功能的两个类中使用静态方法,但这种设计似乎很糟糕。

我是否可以使用任何类型的设计来实现这样的事情,或者我遇到这个问题只是在层次结构中显示一个应该修复的更大问题而不是尝试在它上面工作?

2 个答案:

答案 0 :(得分:2)

Java没有独立的“静态”类,所以这是一个非启动类,因为它甚至不可能。至于静态方法的使用,如果你在谈论无状态实用方法,那就没问题。

我自己,我想我会用构图和界面来解决这个问题:

  • 为我想要的功能
  • 创建一个界面
  • 创建此接口的具体实例
  • 提供界面的两个类字段
  • 接口的get getter和setter方法。
  • 如果类必须自己拥有新行为,那么让它们实现接口,然后让这些类通过调用接口方法中包含的对象的方法,通过“间接”获取行为。

对不起,这个答案有点模糊,而且过于笼统。如果您需要我或其他任何人提供更具体的建议,请考虑告诉我们您问题的具体细节。

答案 1 :(得分:1)

确定新功能所依赖的这两个类的常见功能。然后,将这些功能提取到接口,修改这两个类以实现该接口,并将新功能代码放在其自己的类中(或者可能是某个静态方法,例如NewFeature.doTheThing(NewFeaturable toWhat))并使其在这些接口上运行

如果现有的类必须从"新功能"中获取/ call方法的信息,那么给它们一个NewFeature字段,该字段是新要素类的一个实例并拥有它们与该对象交互。伪代码:

interface NewFeaturable {
    int getRelevantInfo ();
}

class NewFeature {
    final NewFeaturable object;
    NewFeature (NewFeaturable object) { this.object = object; }
    void doSomething () { int x = object.getRelevantInfo(); ... }
}

class ExistingClass extends Base implements NewFeaturable {
    final NewFeature feature;
    ExistingClass () { ...; feature = new NewFeature(this); }
    @Override int getRelevantInfo () { ... }
    void doSomethingNew () { feature.doSomething(); }
}

警惕new NewFeature(this),因为ExistingClass的子类在调用时不会完全构造。如果这是一个问题,请考虑推迟feature的初始化,直到需要它为止。

很多具体细节取决于你的具体情况,但希望你能得到一般的想法。