Class 编写代码最少的设计层次结构
我曾经被要求设计类/接口层次结构,以实现代码冗余最少的类 假设有3个类,其中每2个都为某个方法共享相同的代码(即类A和B都有methodAB(),类B和C都有methodBC()等等) 有人问我,在这样的上下文中,创建一个抽象类,每个类(A、B、C)都扩展或实现接口,或者以不同的方式解决它,这样做更好吗Class 编写代码最少的设计层次结构,class,interface,abstract-class,hierarchy,Class,Interface,Abstract Class,Hierarchy,我曾经被要求设计类/接口层次结构,以实现代码冗余最少的类 假设有3个类,其中每2个都为某个方法共享相同的代码(即类A和B都有methodAB(),类B和C都有methodBC()等等) 有人问我,在这样的上下文中,创建一个抽象类,每个类(A、B、C)都扩展或实现接口,或者以不同的方式解决它,这样做更好吗 假设这个问题可以扩展到4个类(当每3个类都有相同的equal方法时),以此类推。解决这个问题的最佳方案是什么?是否有一种方法可以使每个方法的代码只编写一次 如果要使用抽象类,那么(从您的示例中)
假设这个问题可以扩展到4个类(当每3个类都有相同的equal方法时),以此类推。解决这个问题的最佳方案是什么?是否有一种方法可以使每个方法的代码只编写一次 如果要使用抽象类,那么(从您的示例中)B将不得不与类A和类B共享方法。因此,如果A和B都扩展了类AB,则B不能再次扩展类BC。正如您所说的,您可以使用接口来实现这一点,但是您将只共享方法的原型,而不共享实现
已经说过,C++是一种允许多重继承的语言,它带来了需要小心的其他问题(菱形问题等)。此外,在Java8中,您可以在接口中获得(实现)
在你的问题中,我认为我们正在考虑。确保浏览其他设计模式-策略也有点类似。在这种情况下,需要回答两个问题-
但一般来说,这种症状需要在对象模型级别重新检查。我们可能会发现我们违反了单一责任原则或“IsA”关系。这样的补丁可能会在将来出现。是的,设计模式,这可能是他们对我的期望。。。那我就从那里开始。谢谢我问这个问题不是很具体。问题是这些常用方法在名称方面是相同的。所以每个类都有methodAB(),但A和B有相同的实现,而C类有不同的实现(但仍然命名为methodAB()),以此类推。所有这些类都应该彼此“并行”,这意味着在最简单的情况下,它们都应该是基类的扩展-但问题是我们真的需要基类还是只需要一个或。。。?