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 为什么装饰器和代理中的引用指向它们的主题';s界面和混凝土分别是什么?_Design Patterns_Proxy_Decorator_Gang Of Four - Fatal编程技术网

Design patterns 为什么装饰器和代理中的引用指向它们的主题';s界面和混凝土分别是什么?

Design patterns 为什么装饰器和代理中的引用指向它们的主题';s界面和混凝土分别是什么?,design-patterns,proxy,decorator,gang-of-four,Design Patterns,Proxy,Decorator,Gang Of Four,从四人帮的设计模式看 为什么装饰器装饰器组件对装饰器的引用指向装饰器的接口组件 而代理的引用realSubject指向具体的realSubject 谢谢。代理可能只指向其主题的界面。GoF提到 如果RealSubject和Subject接口相同,Proxy可以引用Subject 但是,根据实现的不同,代理可以通过调用构造函数来实例化其主题,这需要引用具体的对象。因为GoF实际上就是这样构思的。它们定义了几组相似的模式,这似乎主要是因为它们展示了本书的基本主题的变化,即编程到接口,以及支持组合

从四人帮的设计模式看

为什么装饰器
装饰器
组件
对装饰器
的引用指向装饰器的接口
组件

而代理的引用
realSubject
指向具体的
realSubject


谢谢。

代理可能只指向其主题的界面。GoF提到

如果
RealSubject
Subject
接口相同,
Proxy
可以引用
Subject


但是,根据实现的不同,代理可以通过调用构造函数来实例化其主题,这需要引用具体的对象。

因为GoF实际上就是这样构思的。它们定义了几组相似的模式,这似乎主要是因为它们展示了本书的基本主题的变化,即编程到接口,以及支持组合而不是实现的继承。GoF确实将这两种模式归因于不同的目的,你可以根据这些目的来解释差异,但集中在这两种模式上可能会忽略潜在的主题,而这些主题比所呈现的特定模式重要得多。@John Bollinger这不是正确的解释。Decorator是关于动态地附加额外责任的。它还说-“…为一个特定的组件类提供不同的Decorator类可以让您混合和匹配职责。Decorator还可以让您轻松地添加两次属性…”。保持向混凝土构件以及任何其他装饰物添加装饰物的能力(甚至可能是同一装饰物两次),Decorator必须引用这两种类型的基类型,组件是唯一正确的地方。Decorator是以分层的方式添加额外的职责,也称为包装器(Decorator也可以装饰装饰对象)。其中,as Proxy是一个代理对象,用于控制对RealSubject的访问。基本上意图是不同的。代理对于层次结构来说不是通用的,但它是特定于真实主体的。正如我所说,@KedarTokekar,“GoF确实将不同的目的归因于这两种模式,你可以根据这些目的来解释差异。”如果你愿意用这些术语来看待它,这是你的事,但这并不能改变这样做忽略了更深层次的信息的事实。谢谢。“代理可以通过调用构造函数来实例化其主题,这需要引用一个具体的对象。”装饰程序也有同样的必要性吗?装饰程序不会实例化其包装的组件,所以不应该有任何具体的依赖关系。是什么在装饰器中实例化了包装好的组件?装饰器不关心它的组件来自哪里。代理关心它的组件来自哪里吗?什么时候是,什么时候不是?