装饰器为什么是结构性模式而责任链不是?

时间:2018-08-17 01:38:21

标签: design-patterns

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

这两个之间的唯一区别是,一个对象无论经过什么,而另一个对象将完全由一个对象处理。

这种差异如何使一个成为结构模式,而另一个变成行为模式?

2 个答案:

答案 0 :(得分:0)

“一个人无论如何通过而另一个人将完全由一个对象处理的差异”并不是决定结构性还是行为性的。

结构图案(按照Gof格式)

  

关注小节和对象如何构成更大的   结构。结构模式使用继承来构成接口   或实现。

行为模式(按照政府统计)

  

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

在Decorator vs Chain的情况下,看来区别是学术上的,但事实仍然是Decorator符合“结构”的定义。

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

这是GoF的答复,但我认为花样新手在这种情况下花太多时间思考区别是不值得的,特别是考虑到最终产品的相似性!

答案 1 :(得分:0)

好像结构模式是设计模式的其他类别。因此,问题确实在于,为什么责任链是一种行为模式,而装饰者却不是。

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