2014-12-13 51 views

回答

3

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

是的,但它周围的代理其他方式必须实现相同的接口主题

客户并没有意识到,这是使用实例是代理!客户认为这是一个Subject

+0

这只有在涉及工厂时才有价值吗?如果客户正在使用该主题,后来我希望它使用代理,我该怎么做? (反之亦然)。 – neverendingqs 2014-12-14 21:34:26

+0

你是正确的,为了让'Client'不知道它是哪个实现,你必须向Client提供'Subject'实例(代理或真正的主题)。这可以通过工厂模式完成,但也可以通过构造函数或方法调用进行依赖注入。 – dkatzel 2014-12-15 05:46:04

+0

如果客户端在该模式之前使用主题,则必须修改客户端,以便它使用代理模式的主题抽象(看起来几乎像旧主题)。然后,客户不知道它是否在与主题或其代理进行交谈。 – Fuhrmanator 2014-12-15 14:18:48

1

代理和主题应提供相同的一组操作。客户端无法识别请求的实例,代理或主题。它隐藏着它。正因为如此,两个类都实现了相同的接口。

1

这将更像是一个适配器(和对象适配器,使用四人帮的书的术语)。当您稍后在项目中发现需要进行接口适配时,通常会使用适配器。我相信你可以设计代理服务器。

一个原因可能是代理对您的客户应该是透明的。如果Proxies具有与主题不同的界面,那么这个透明度将被打破。只需要考虑一个用例,而不是所有的Subject都需要被代理,例如不是所有的对象都是'远程'的。

+0

我认为这个问题帮助我了解不同之处:http://stackoverflow.com/questions/350404/how-do-the-proxy-decorator-adapter-and-bridge-patterns-differ – neverendingqs 2014-12-15 18:00:15

相关问题