我正在浏览代理模式并注意到 代理类 也实现了 主题 界面,这也是由具体实现或 主题 类实现的。
任何人都可以提供我们需要这样做的理由吗?
我们可以在代理类中创建一个函数,并在此函数中调用 主题 方法。然后客户端代码可以调用此代理类函数,并且可以调用适当的方法。
答案 0 :(得分:3)
按照您建议的方式会得到相同的结果,但我不会将其称为代理,我称之为包装。使用具有接口的代理设计模式将是更好的恕我直言,因为客户端可能不可知哪个类实际用于执行相应的功能。客户端只会看到subject
接口类,而不知道有关Proxy
或RealSubject
具体类的任何信息。这对于代码的长期维护非常重要。
当然,设计模式并不是一个严格的东西,你应该遵循这个模式才能成为"对"。它是常见软件工程方案的指南。因此,您应该以最方便的方式实现它。
为了避免误解,我澄清说我使用this作为代理设计模式的参考。
答案 1 :(得分:1)
表面上的代理应该是所有手段,表现得像是你要求的真实对象。您不应该知道您是使用代理隐藏的代理对象还是真实对象。这就是代理实现Subject
类的原因。
代理可以封装用户不应该看到的逻辑。例如,日志记录,统计信息,连接到远程服务器等。该课程的用户不应该被背景中发生的事情所困扰。
如果您只是使用您编写的代码的人,那么您可以违反此模式,因为您将始终知道那里发生了什么。
现实生活中的例子:例如,互联网连接。用户只是想让它工作,他不应该被打扰连接到代理服务器。对他而言,互联网连接是一个黑盒子。