c# - 长继承层次

标签 c# java design-patterns inheritance architecture

我有很长的类继承层次结构。例如:

-MyAbstractObject
--MyAbstractUiObject
---MyAbstractTable
-----MyAbstractPageableTable
-------MyAbstractScrollableTable
---------MyAbstractStateblaTable

等等...

我在代码完成中读到,理想的继承深度是3。有时允许继承深度为7-9。但我有传承深11!

我如何改变我的架构?什么设计模式适用于我的案例?不好的是我可以在继承层次结构中更改 MyAbstractPageableTableMyAbstractScrollableTable 的位置。这两个类没有混为一类,因为我的目标是单一责任。我还想为用户提供不同的接口(interface)(API)

最佳答案

通常最好使用策略模式,而不是为每个用例创建子类。但很难给出任何硬性建议,因为这取决于具体情况。

在您的示例中,我猜您可以执行表实现并为其提供一个策略对象,该对象可以处理例如分页或表应支持的任何其他显示策略。

根据 Joshua Bloch 的“Effective Java”,使用组合通常比使用继承更好。我不认为更大的继承深度是坏事,只要它们保持可理解性,我猜想 11 级的继承深度并非如此。

关于c# - 长继承层次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17193132/

相关文章:

c# - 无法从查询返回 linq 结果

java - 无法在 JBoss 7.1.1 下部署动态 Web 项目(链接到 EJB 项目)

design-patterns - 设计模式中的抽象类

c# - 如何检查 UNC 路径中是否存在文件?

c# - 确保语句仅在按下并按住某个键时执行一次。

c# - 代码契约(Contract) : Ensures Unproven & Requires Unproven

java - 为什么会出现以下错误 : Can't find a codec for class com. mongodb.client.model.geojson.Polygon

java - 为什么我无法从通用参数访问属性?

ios - 如何在 iOS/xcode 中重用颜色和样式?

java - 在java中设置源和数据路径