Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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
Design patterns 为什么装饰师是一种结构模式和责任链;T_Design Patterns - Fatal编程技术网

Design patterns 为什么装饰师是一种结构模式和责任链;T

Design patterns 为什么装饰师是一种结构模式和责任链;T,design-patterns,Design Patterns,为什么装饰师是一种结构模式,而责任链不是 这两者之间的唯一区别是,一个对象无论如何都会传递,而另一个对象只会被一个对象处理 这种差异是如何使一个成为结构模式和另一个行为模式的?决定是结构模式还是行为模式的并不是“一个不管怎样都会传递,而另一个只会由一个对象处理的差异” 结构模式(根据Gof) 关注类别和对象如何组合以形成更大的 结构。结构模式使用继承来组合接口 或实现 行为模式(根据Gof) 与算法和职责分配有关 在对象之间 在Decorator与Chain的案例中,这种区别似乎是学术性的,但事

为什么装饰师是一种结构模式,而责任链不是

这两者之间的唯一区别是,一个对象无论如何都会传递,而另一个对象只会被一个对象处理

这种差异是如何使一个成为结构模式和另一个行为模式的?

决定是结构模式还是行为模式的并不是“一个不管怎样都会传递,而另一个只会由一个对象处理的差异”

结构模式(根据Gof)

关注类别和对象如何组合以形成更大的 结构。结构模式使用继承来组合接口 或实现

行为模式(根据Gof)

与算法和职责分配有关 在对象之间

在Decorator与Chain的案例中,这种区别似乎是学术性的,但事实是Decorator符合结构的定义

Chain也使用链表,但它不是必需的。列表项通过继承关系关联,但列表是关于分配或承担责任的


这是根据GoF的回复,但我不认为模式的新学员浪费太多时间思考这种情况下的区别是值得的,特别是考虑到最终产品的相似性

结构模式似乎是设计模式的一个杂项类别。所以问题是为什么责任链是一种行为模式,而装饰者不是


责任链和decorator在一个方面不同,decorator总是遍历链中的所有对象,而责任链由其中一个对象处理并停止链。这使得责任链成为从众多行为中选择一种行为的机制。装饰者并不是要从众多行为中选择任何一种,这使得它不是一种行为模式。由于它也不是一个创造性的模式,所以必须将其归类为一个结构模式。

装饰器模式基本上包装了一个已经存在的类,然后向其添加一些功能。我想这使它具有结构性。责任链就是让一个类的一个实现委托给另一个实现,这是行为的。@Tim Decorator模式也使用委托。根据decorator模式的Wikipedia页面,我不认为委派是delegator模式的主要角色。@Tim我在两个地方看到了“委派”一词。对于责任链页面,我没有看到任何。是的,授权正是责任链的全部内容。也许装饰器确实将行为从它包装的类委托给已经存在的类。