为什么装饰器是一种结构型而非行为型设计模式?

11

我认为自己对GoF设计模式有中级知识水平。然而,当需要将这些模式分类为结构和行为模式时,我会感到困惑。我对创建型模式没有任何困惑。

来自维基百科-装饰器模式 - 在面向对象编程中,装饰器模式是一种设计模式,允许在不影响来自同一类的其他对象的情况下,静态或动态地向单个对象添加行为

从上述定义可以清楚地看出这是关于行为的,那么

  1. 为什么装饰器是结构模式?
  2. 结构模式的标准是什么?
  3. 行为模式的标准是什么?

谢谢。

1. 装饰器模式被归类为结构模式,因为它通过组合对象来实现扩展功能,而不是通过继承来实现。这种组合提供了更大的灵活性,并允许在运行时动态地添加、删除或更改对象的行为。
2. 结构模式的标准是它们专注于如何组成对象以形成更大的结构,并且通常涉及对象之间的静态关系。这些模式通常涉及组合、适配器、桥接、装饰器、外观、享元和代理。
3. 行为模式的标准是它们专注于对象之间的动态交互,并且通常涉及对象之间的协作和责任分配。这些模式通常涉及职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法和访问者。

哦,是的,我很高兴Java不会干扰那些东西。我正在阅读一本Python书籍,它在谈论装饰器,我的脑袋简直要炸了。 - jsedano
@anakata:Python中的装饰器是一种语言结构;这个问题涉及到装饰器设计模式 - Alex
我最好开始阅读关于这种东西的资料 XD。 - jsedano
2个回答

13

行为型模式关注的是独立对象之间的通信:例如中介者、观察者、责任链(甚至是被描述为“将算法与操作对象结构分离”的访问者)。它们规定了独立对象之间如何互动。

结构型模式关注的是组合和分层抽象的方式,例如适配器、桥接器和组合。装饰器是一种组合功能的技术,因此它与结构型模式相关联。


3
如果您需要对您的报价进行解答:行为变化是由于结构性修改引起的。
也就是说,您可以通过特定的类结构“装饰”一个对象(通过委托)以实现所需的行为。

1
我没有理解。 我认为,每种模式都会施加一些结构,对吗? - Anand Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接