【问题标题】:Combinatorial explosion of class hierarchy类层次结构的组合爆炸
【发布时间】:2020-06-19 01:25:04
【问题描述】:

我有一个仅在某些属性上有所不同的类层次结构,我想创建由类层次结构组合而成的类(如 uml 图片),这可能导致层次结构爆炸。 这个设计有什么解决方案吗?它就像装饰器模式,但在属性而不是行为上。是否可以使用装饰器代替继承

【问题讨论】:

  • 您可以使用 Interfaces+Composition+Delegation 而不是 extends。 Wikipedia 的关于“组合优于继承”的页面有一些很好的例子:en.wikipedia.org/wiki/Composition_over_inheritance 但这有点取决于你在说什么语言。一些语言有更优雅的解决方案来解决这个问题(比如 Go 对组合对象的自动委托,或 Scala 的 Traits,或 Ruby 的 Mixins 等)。
  • 为什么不将所有字段放在一个数据结构中,让客户读取他们需要的内容?没有行为就没有多态性,因此不需要继承或组合。

标签: oop inheritance design-patterns


【解决方案1】:

这是可能的。 您需要做的是反转此层次结构的依赖关系。在支持接口的语言(如 c#)中,您可以创建这些结构并将它们组合以提供此行为。

Combination”将由继承Combination Class并实现ChildClass1(Interface)基类装饰strong> 和 ChildClass2(Interface) 例如。将基类视为装饰器。检查 C# 中的装饰器模式Here

另一个选项是根本不使用装饰器,具有 Base ClassChidClass123接口

【讨论】:

    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2015-08-28
    • 2014-03-01
    • 1970-01-01
    相关资源
    最近更新 更多