我曾经要求设计类/接口层次结构来实现用最少的代码冗余等级设计层次用最少的代码编写
比方说,与有3类,其中每个2共享相同的代码对于一些方法(即是A类和B类都有方法AB(),B类和C类都有methodBC()等)
有了这样的背景,我被问到是否最好创建一个抽象类,每个类(A,B,C )扩展或实现接口,或者可能解决它不同?
假设这个问题可以扩展到4个类别(每个类别中有3个具有相同的方法)等等。什么是最好的解决方案?有没有一种方法每个方法的代码只会被写入一次?
我曾经要求设计类/接口层次结构来实现用最少的代码冗余等级设计层次用最少的代码编写
比方说,与有3类,其中每个2共享相同的代码对于一些方法(即是A类和B类都有方法AB(),B类和C类都有methodBC()等)
有了这样的背景,我被问到是否最好创建一个抽象类,每个类(A,B,C )扩展或实现接口,或者可能解决它不同?
假设这个问题可以扩展到4个类别(每个类别中有3个具有相同的方法)等等。什么是最好的解决方案?有没有一种方法每个方法的代码只会被写入一次?
如果您要使用抽象类,您有问题(从您的示例中)B必须与A类和B类共享方法。因此,如果您有A类和B类扩展的AB类,那么您不能让B再次延长BC级。正如你所说,你可以使用Interfaces来实现,但是你只会共享方法原型而不是实现。例如,C++就是一种允许多重继承的语言,它引发了其他需要注意的问题(钻石问题等)。此外,在Java 8中,您将在接口中获得default methods(实现)。
在你的问题,我认为我们正在寻找delegation pattern。确保通过其他设计模式 - 策略也有点类似。
在这种情况下,两个问题需要回答 -
但是一般来说这样的症状需要在对象模型级重新检查。大概我们可能会发现我们违反单一责任原则或'IsA'关系。将来这些补丁可能会陷入困境。
我没有特别提出这个问题。问题是这些常用方法在名称方面是相同的。所以每个类都有methodAB(),但是A和B有相同的实现,当C类有不同的(但仍然命名为methodAB())等等。所有这些类都应该相互“平行”,这意味着在最简单的情况下,它们都应该是基类的扩展 - 但问题是我们是否真的需要基类或者我们只需要一个还是......? –
是的,设计模式,这可能是他们对我的期望...我会在那里开始。谢谢! –