首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >长继承层次结构

长继承层次结构
EN

Stack Overflow用户
提问于 2013-06-19 21:54:21
回答 4查看 123关注 0票数 1

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

代码语言:javascript
运行
复制
-MyAbstractObject
--MyAbstractUiObject
---MyAbstractTable
-----MyAbstractPageableTable
-------MyAbstractScrollableTable
---------MyAbstractStateblaTable

等等。

我在Code complete上读到,理想的继承深度是3,有时允许将继承深度设置为7-9。但我有深厚的11号遗产!

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

EN

回答 4

Stack Overflow用户

发布于 2013-06-19 22:12:21

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

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

根据Joshua Bloch的"Effective“,使用组合通常比继承更好。我不认为更大的遗传深度是不好的,只要它们是可以理解的,有11个级别,我猜情况并非如此。

票数 1
EN

Stack Overflow用户

发布于 2013-06-19 22:17:09

构图。您会得到两个较小的继承层次结构:

代码语言:javascript
运行
复制
class MyAbstractObject
    class MyAbstractUIObject : MyAbstractObject
        class MyAbstractTable : MyAbstractUIObject

interface IMyAbstractTableBehaviour { void Perform(); }
    class MyAbstractTablePageableBehaviour : IMyAbstractTableBehaviour
    class MyAbstractTableScrollableBehaviour : IMyAbstractTableBehaviour
    class MyAbstractTableStateableBehaviour : IMyAbstractTableBehaviour

您可以使用这三种行为的任意组合来实例化MyAbstractTable的子类,并且实现额外的行为是微不足道的。

票数 0
EN

Stack Overflow用户

发布于 2013-06-19 22:17:51

我不知道什么是代码完成,但理想的继承可能只是一个正确方向的信号(指导),它并不适用于每种情况(也许你的情况就是其中之一)。UI控件的继承层次结构通常具有此现象,如WPF (Windows Presentation Foundation)中的控件。因此,如果你正在构建一个UI框架,你可能会遇到这个问题。It 依赖于上下文上下文( Context )(您的具体情况),但总体继承增加了代码中的耦合性,正如@Casey所说,如果可能,您应该倾向于组合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17193132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档