2

查看wikipedia 上的 UML 图,代理类和主题类都实现了相同的接口。

据我了解,代理类的目的是委托。这可以通过组合来完成;委托类不必实现相同的接口。

主题类必须实现与代理类相同的接口是否有原因?

4

3 回答 3

4

主题类必须实现与代理类相同的接口是否有原因?

是的,但是代理必须实现与主题相同的接口

客户端没有意识到它正在使用的实例是代理!客户认为这是一个Subject

于 2014-12-13T20:29:10.280 回答
1

那将更像是一个适配器(和对象适配器,使用四人帮的术语)。当您在项目后期发现需要接口适配时,通常会使用 Adapter。我相信你预先设计了代理。

一个原因可能是代理应该对您的客户透明。如果代理具有与主题不同的接口,那么这种透明度将被打破。当您的所有主题都不需要代理时,请考虑一个用例,例如,并非所有对象都是“远程”的。

于 2014-12-13T20:17:19.107 回答
1

Proxy 和 Subject 应该提供相同的操作集。客户端无法识别请求的实例是代理还是主题。它是为它隐藏的。因此,两个类都实现了相同的接口。

于 2014-12-13T19:09:35.333 回答