远程门面模式与门面模式

时间:2013-12-11 18:44:14

标签: design-patterns facade

除了Remote Facade pattern更多粗粒度的接口以及调用此接口的客户端远程而不是本地,两者之间是否存在任何其他差异模式?

谢谢

1 个答案:

答案 0 :(得分:5)

您指的是像Java的RMI这样的Remote界面吗?我认为这不是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个网络消息,因此调用时间应该更短。