使用接口/继承时重复代码

时间:2017-08-31 12:34:26

标签: java oop inheritance

我有一个关于继承的情况,我发现很难找到一个好的OO设计。

基本上我有以下情况:

Structure

Webservice是一个抽象类,它包含所有Web服务的所有泛型函数。 然后,大多数网络服务分为促销网络服务(检索促销数据)或能够检索有关人员的信息(PersonWebservice)。这些也是抽象的,因为它们包含对所有子项都适用的通用实现(在获取数据后考虑额外的处理)。孩子们只拥有特定于该子网络服务的功能和实现。

到目前为止一切都那么好......但是......我有一个网络服务(Webservice E)与整个设计混淆......因为这个web服务既是一个人的webservice也是一个促销web服务......就我而言可以看到在Webservice和Promo / Person webservices之间没有真正的选择。实际上,大多数Web服务都具有有限的功能,而Web服务E可以同时执行这两种操作。

我已经考虑过使用接口但是我必须在子节点中多次实现所有通用代码,或者我必须扩展其中一个超类并复制另一个分支的通用代码的一半,这不是听起来对我来说是一个很好的设计...

有没有人有任何提示或建议可以解决这样的设计/结构问题,同时避免尽可能多的重复代码?

非常感谢提前!

2 个答案:

答案 0 :(得分:3)

我想到的典型事情是:FCoI - 赞成合成而不是继承。

你可以:

  • 创建 interfaces ,围绕“核心功能”
  • 让那些现有的类相应地实现它们
  • 和WebServiceImpl还实现了接口 - 通过委派到其他类的实例

答案 1 :(得分:0)

  

据我所知,在Webservice和Promo / Person网络服务之间没有真正的选择。实际上,大多数Web服务都具有有限的功能,而Web服务E可以同时执行这两种操作。

为什么会这样?您可以将WebService E作为实现WebService的类,然后Promotional WebservicePerson Webservice扩展它,覆盖必须作为抽象的抽象方法。

抽象方法的一个简单示例:

public abstract class Animal {

    @Override
    public abstract String toString();
}