【发布时间】:2013-11-17 07:33:01
【问题描述】:
我正在浏览代理模式,并注意到 代理类 也实现了 Subject 接口,它也由具体实现或 Subject 类实现。
谁能提供我们需要这样做的理由?
我们可以在代理类中创建一个函数并在该函数中调用 subject 方法。然后客户端代码就可以调用这个代理类函数并调用相应的方法了。
【问题讨论】:
标签: design-patterns proxy-pattern
我正在浏览代理模式,并注意到 代理类 也实现了 Subject 接口,它也由具体实现或 Subject 类实现。
谁能提供我们需要这样做的理由?
我们可以在代理类中创建一个函数并在该函数中调用 subject 方法。然后客户端代码就可以调用这个代理类函数并调用相应的方法了。
【问题讨论】:
标签: design-patterns proxy-pattern
按照您建议的方式会得到相同的结果,但我不会将其称为代理,我会称其为包装器。恕我直言,将代理设计模式与接口一起使用会更好,因为客户端可能不知道实际使用哪个类来执行相应的功能。客户端只会看到subject 接口类,而对Proxy 或RealSubject 具体类一无所知。这对于代码的长期维护很重要。
当然,设计模式并不是为了“正确”而应该遵循的严格标准。它是常见软件工程场景的指南。因此,您应该以最方便的方式实现它。
为了避免误解,我澄清一下我使用this 作为代理设计模式的参考。
【讨论】:
代理应该在表面上,是一切手段,表现得像你要求的真实对象。您应该无法判断您使用的是代理对象还是被代理隐藏的真实对象。这就是代理实现Subject 类的原因。
代理可以封装用户不应该看到的逻辑。例如日志记录、统计信息、连接到远程服务器等等。类的用户不应该被后台发生的事情所困扰。
如果您只是使用自己编写的代码的人,那么您可以不遵守这种模式,因为您将永远知道那里发生了什么。
现实生活中的示例:以互联网连接为例。用户只是想让它工作,他不应该为连接到代理服务器而烦恼。对他来说,互联网连接是一个黑匣子。
【讨论】: