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 为什么代理模式被分类为结构模式?_Design Patterns_Conceptual_Proxy Pattern - Fatal编程技术网

Design patterns 为什么代理模式被分类为结构模式?

Design patterns 为什么代理模式被分类为结构模式?,design-patterns,conceptual,proxy-pattern,Design Patterns,Conceptual,Proxy Pattern,根据结构模式,他们关注如何组合类和对象以形成更大的结构 适配器和装饰器符合此定义。但对于代理来说,它只是主体和真实对象之间的一种交互,它并没有结合任何东西来产生一个新的对象。它不应该被归类为行为模式吗 我读过不同的帖子,也有相关的问题,比如 和 但是没有人回答这个问题。有趣的问题,我将尝试回答: 行为模式侧重于对象之间的松散耦合通信和具体职责的分配(如您提供的链接所述)。如果我们看一下策略模式、模板模式或观察者,我们可以区分责任和每个类所做的事情(它们的责任和具体实现是什么)。如果我们将策略或

根据结构模式,他们关注如何组合类和对象以形成更大的结构

适配器和装饰器符合此定义。但对于代理来说,它只是主体和真实对象之间的一种交互,它并没有结合任何东西来产生一个新的对象。它不应该被归类为行为模式吗

我读过不同的帖子,也有相关的问题,比如 和


但是没有人回答这个问题。

有趣的问题,我将尝试回答:

行为模式侧重于对象之间的松散耦合通信和具体职责的分配(如您提供的链接所述)。如果我们看一下策略模式、模板模式或观察者,我们可以区分责任和每个类所做的事情(它们的责任和具体实现是什么)。如果我们将策略或观察者的一个具体实现替换为另一个,通信仍然保持不变,但是替换对象会影响对象的工作方式(内部)。换句话说:在行为模式中,我们交换类的具体实现,以强制更改代码片段的行为,而不中断对象之间的一般通信。这里我们不关注对象之间的关系,只关注交换

在结构模式中(我在这里查看decorator,它可能与我们关注简化接口数量的facade模式不完全兼容):

  • 我们的重点是在不改变包裹对象本身的行为的情况下,向包裹对象添加额外的行为。在行为模式中,我们将改变包装对象的具体实现,并将其隐藏在接口后面。在这里,我们不改变包装对象的具体实现(它仍然保持不变,它仍然是同一个具体类的实例),我们只是添加/扩展其他内容/功能/行为。Decorator和Proxy不改变/交换包装对象,它们只是添加了自己的额外功能(开放-封闭组合)

  • 我们还关注包装器之间的关系。Decorator、proxy和adapter通常(最简单的)与wrapped对象之间有一对一的关系,而flyweight管理更多的对象。在行为模式中,我们不关注要管理的元素数量,交换元素的流程和灵活性更为重要

  • 从这个角度来看,代理似乎不符合行为模式。我们不能将一个代理更改为另一个代理(因为不兼容),它也没有定义与代理包装的对象通信的标准方式(与中介、观察者或模板模式相反)