Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 类层次结构的组合爆炸_Oop_Inheritance_Design Patterns - Fatal编程技术网

Oop 类层次结构的组合爆炸

Oop 类层次结构的组合爆炸,oop,inheritance,design-patterns,Oop,Inheritance,Design Patterns,我有一个只在某些属性上不同的类层次结构,我想创建一个类层次结构的组合(如uml图片),它可以导致分解层次结构。 这个设计有什么解决方案吗?它类似于装饰器模式,但基于属性而不是行为。是否可以使用decorator作为继承的替代方法?这是可能的。 您需要做的是反转此层次结构的依赖关系。在支持接口的语言中(如c#),您可以创建这些结构并将其组合以提供此行为 “组合”将由继承组合类并实现子类1(接口)和子类2(接口)的基类装饰。将基类视为装饰器。检查C#中的装饰图案 另一个选项是根本不使用装饰器,将基类

我有一个只在某些属性上不同的类层次结构,我想创建一个类层次结构的组合(如uml图片),它可以导致分解层次结构。 这个设计有什么解决方案吗?它类似于装饰器模式,但基于属性而不是行为。是否可以使用decorator作为继承的替代方法?这是可能的。 您需要做的是反转此层次结构的依赖关系。在支持接口的语言中(如c#),您可以创建这些结构并将其组合以提供此行为

组合”将由继承组合类并实现子类1(接口)子类2(接口)基类装饰。将基类视为装饰器。检查C#中的装饰图案


另一个选项是根本不使用装饰器,将基类ChidClass123作为接口

您可以使用接口+组合+委派,而不是扩展。维基百科关于组合而非继承的页面有一些很好的例子:但这取决于你所说的语言。有些语言有更优雅的解决方案来解决这个问题(比如Go的自动委托给组合对象,Scala的Traits,Ruby的mixin等等)。为什么不把所有字段放在一个数据结构中,让客户端读取他们需要的内容呢?没有行为就没有多态性,因此不需要继承或组合。