bck*_*rld 1 design-patterns facade
除了Remote Facade pattern
更粗粒度的接口和客户端调用此接口是远程而不是本地之外,这两种模式之间是否还有其他差异?
谢谢
你指的是Remote
像Java的RMI这样的界面吗?我不认为这是一个facade
但实际上是proxy
模式实现.
Remote将所有呼叫(通过代理模式从用户隐藏)转发到另一台机器.这使用户隐瞒了工作没有在本地完成的事实.
Facade
模式通常将复杂的界面简化为更简化的版本(就像用一个不同的控制面板代替一个复杂的控制面板而只使用一些最常用的按钮).如果你真的需要更复杂的版本,你仍然可以使用旧的更复杂的控件.
编辑
在您指出您指的是Marin Fowler之后,Remote Facade
我将进一步解释:
福勒Remote Facade
不只是Remote
+ Facade
模式.门面使用的简化背后还有一个额外的原因.
而不仅仅是简化复杂的方法或从外观中删除使用过的方法.RemoteFacade
明确用于在"未压缩"接口中组合几种常用方法,以减少延迟和网络流量.
由于Remote
调用将通过网络(使用Java的RMI等),因此将方法调用转换为消息以通过网络会产生大量开销.消息需要一段时间才能通过网络并获得消息并解组响应等.也可能存在安全层检查和拦截流量.所有这些都增加了调用远程方法所需的时间和精力.
RemoteFacade
将几种常用方法组合成单个网络消息.所以在他的书中使用Fowler的例子,如果你有一个Address的接口,有setCity()setZipcode(),setStreet()的单独setter.那将是通过网络的3个远程呼叫.而是RemoteFacade
将其转换为1方法setAddress(street,city,zip),这只需要传递1个网络消息,因此调用时间应该更短.