两者中哪一个应该首选?
有一些方法由A,B和C类调用。
这些方法是否应该封装在D类(A,B和C的基础)中?
OR
如果将这些方法封装在类U和其他类中,则可以根据需要使用这些方法。
应该根据什么做出决定?
感谢。
答案 0 :(得分:9)
您应该创建一个static
实用程序类。
只有在实际有意义的情况下才使用继承 - 如果A
,B
和C
实际上 是D
。
答案 1 :(得分:3)
我根据方法的作用做出决定,如果他们正在做特定于A,B和C类的事情,那么他们应该在基类中。这有助于保持代码清洁,方法是将类相关功能隐藏在系统的其他部分之外。 (当然,我假设A,B和C已经从D继承,或者显然是相关的)
如果他们正在处理其他类型的东西,这些东西不是A,B和C所固有的,那么为了最大化重用的机会,他们应该在实用程序类中。
如果他们正在使用其他类型的特定于其他类型的东西(例如漂亮打印日期时间),请考虑为 类型添加扩展方法。
答案 2 :(得分:2)
除非有明显的是-a 关系,否则我会偏离继承。我怀疑你上面的描述并非如此。我的首选解决方案是:
答案 3 :(得分:0)
使用基类 如果你打算只根据基类编写一些逻辑 - 那么创建一个基类是有意义的。在这种情况下,派生类应该完全可替代您的基类。不应该有任何切换逻辑来检查派生类型并相应地采取行动。见Liskov替代原则:http://en.wikipedia.org/wiki/Liskov_substitution_principle
使用实用工具类 某些语言具有不支持多重继承的限制。如果您已经有一个有意义的基类,那么您需要去实用程序类。此外,当您使用继承时,您正在创建从派生类到基类之间的紧密耦合。
如果派生类自然可以替代它的基类,我会选择基类。如果目的只是在类之间共享一些可重用的代码,那么使用实用程序类更有意义。