【问题标题】:Proxy Design Pattern: Association to the Interface or to RealSubject代理设计模式:与接口或 RealSubject 的关联
【发布时间】:2021-04-20 17:20:24
【问题描述】:


我目前正在学习代理模式,并在两本不同的书中找到了它的两种不同实现。请查看模式 UML 图的链接,因为我还不能嵌入图片。

Pattern 1

Pattern 2

我的老师说模式 1 是正确的实现,尽管大多数教程和资源都使用模式 2 实现。我的老师认为模式 2 是错误的,因为“它允许代理调用 RealSubject 上的所有公共方法,这使得它与适配器模式没有真正的不同”,而模式 1“强制代理只能调用来自真实主体内的接口类"

我的问题是:

  1. 这两个 UML 图之间的真正区别是什么?它们本质上不是表现出同样的东西吗?
  2. 如果模式 2 是错误的,为什么包括书籍在内的大多数资源都使用它来显示代理模式?

感谢您的回答。

【问题讨论】:

  • 我看不出它们之间有什么区别。接口不是要处理的真实对象,它们是合同。

标签: oop design-patterns proxy-pattern


【解决方案1】:

这两个图之间的区别在于,在 #1 中,Proxy 引用了 Subject 接口,而在 #2 中,Proxy 引用了具体的 Subject 实现(a.k.a. RealSubject)。

这两个图都是正确的,因为四人组代理模式涵盖了许多不同的用例:在第 208 页,他们列出了远程代理虚拟代理保护代理智能引用作为同一模式的不同实现。实现的程度有所不同,其中一些了解其具体主题,而另一些则不了解。

对具体主题的意识或无知之间的这种区别通常会导致对differences between the Proxy and Decorator patterns 的混淆。不应将 Proxy 与 Adapter 混淆;因为在适配器模式中,客户端和主题具有完全不同的接口(因此需要适配器)。代理(和装饰器)与其客户端和主题共享一个通用接口。

【讨论】:

    猜你喜欢
    • 2011-06-29
    • 2021-12-13
    • 2020-10-23
    • 2017-08-11
    • 2018-12-04
    • 2015-05-19
    • 2020-08-01
    • 1970-01-01
    相关资源
    最近更新 更多