我曾被要求设计类/接口层次结构以实现具有最少代码冗余的类
让我们说有3个类,每个类共享一些方法的相同代码(即A类和B类都有methodAB(),B类和C类都有方法BC()等)
有了这样的上下文,我被问到最好是创建一个抽象类,每个类(A,B,C)扩展或实现接口,或者可能以不同的方式解决它?
让我们说这个问题可以扩展到4个类(当每个类中有3个具有相同的相等方法时),依此类推。这是什么最好的解决方案?有没有办法让每个方法的代码只写一次?
答案 0 :(得分:1)
如果你要使用抽象类,你就会遇到(从你的例子中)B必须与A类和B类共享方法的问题。所以如果你有一个AB类,A和B都扩展,你就不能让B再次扩展BC类。正如你所说,你可以使用Interfaces来做到这一点,但是你将只分享方法的原型而不是实现。
话虽如此,例如,C ++是一种允许多重继承的语言,这会带来您需要注意的其他问题(Diamond问题等)。此外,在Java 8中,您可以在接口中获得default methods(实现)。
在你的问题中,我认为我们正在考虑delegation pattern。确保通过其他设计模式 - 策略也有点类似。
答案 1 :(得分:0)
在这种情况下,需要回答两个问题 -
但总的来说,这种症状需要在对象模型级别进行重新检查。可能我们可能会发现我们违反了单一责任原则或“IsA”关系。这些补丁可能会在将来陷入混乱。