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