请让我知道这是否不合适(特别是对于Programmers.SE或其他问题而言是否更好)。

好的。因此,我有一些当前要表达为接口(interface)的“特征”。我们称它们为“可更新”和“可破坏”。将它们表示为接口(interface)有一个缺点,即我无法在所有“可破坏的”组件之间共享行为。另一方面,将它们表示为抽象类意味着在没有将混合特性明确定义为另一个抽象类(“UpdateableAndDestructible”)的情况下,我无法进行混合和匹配,此外,这感觉像是在滥用抽象类功能。但是,如果没有更干净的方法来处理此问题,那可能就是我最终要做的事情。

到目前为止,对于这个难题,纯Java解决方案有哪些选择?我是否可以描述共享的行为,然后按我认为合适的方式进行混合和匹配,而不必明确描述我将要使用的每个排列?

最佳答案

也许可以通过混合使用接口(interface)和默认实现来实现目标。

喜欢:

public interface Updatable {
  void updated();
}

public interface Loadable {
  void load();
}

public class DefaultUpdatable implements Updatable {
 ...
}

public class DefaultLoadable implements Loadable {
 ...
}

public class SomeObject implements Updatable, Loadable {
  private final Updatable updatable = new DefaultUpdatable();
  private final Loadable loadable = new DefaultLoadable();

  public void load() {
    this.loadable.load();
  }

  public void updated() {
    this.updatable.updated();
  }
}

仍然很吵,也许没有您想要的灵活,但是比做UpdatableAndDestructable事情要干净一些。

09-26 23:20