【发布时间】:2014-12-13 18:33:20
【问题描述】:
查看UML diagram on wikipedia,代理类和主题类都实现了相同的接口。
据我了解,代理类的目的是委托。这可以通过组合来完成;委托类不必实现相同的接口。
主题类是否必须实现与代理类相同的接口?
【问题讨论】:
标签: design-patterns proxy-pattern
查看UML diagram on wikipedia,代理类和主题类都实现了相同的接口。
据我了解,代理类的目的是委托。这可以通过组合来完成;委托类不必实现相同的接口。
主题类是否必须实现与代理类相同的接口?
【问题讨论】:
标签: design-patterns proxy-pattern
主题类是否必须实现与代理类相同的接口?
是的,但是 proxy 必须实现与 subject
相同的接口客户端没有意识到它正在使用的实例是代理!客户认为是Subject
【讨论】:
Client 不知道它是哪个实现,您必须向客户端提供Subject 实例(代理或真实主题)。这可以通过工厂模式完成,但也可以通过构造函数或方法调用进行依赖注入。
代理和主题应该提供相同的操作集。客户端无法识别请求的实例是代理还是主题。它是为它隐藏的。因此,两个类都实现了相同的接口。
【讨论】:
这更像是一个适配器(和对象适配器,使用四人帮的术语)。当您在项目后期发现需要接口适配时,通常会使用 Adapter。我相信你会预先设计代理。
一个原因可能是代理应该对您的客户透明。如果代理具有与主题不同的接口,那么这种透明度将被打破。当不需要代理所有主题时,请考虑一个用例,例如并非所有对象都是“远程”的。
【讨论】: