Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。
就如同医院的接待员一样,Facade模式的Facade类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与Facade对象打交道,而不需要与子系统内部的很多对象打交道。
问题
举一个生活中的小例子, 大凡开过学或者毕过业的都会体会到这样一种郁闷: 你要去 n个地方办理 n 个手续(现在大学合并后就更加麻烦,因为可能那 n 个地方都隔的比较远)。但是实际上我们需要的就是一个最后一道手续的证明而已, 对于前面的手续是怎么办的、 到什么地方去办理我们都不感兴趣。实际上在软件系统开发中也经常回会遇到这样的情况, 可能你实现了一些接口(模块),而这些接口(模块) 都分布在几个类中(比如A 和 B、 C、 D): A 中实现了一些接口, B 中实现一些接口(或者A 代表一个独立模块, B、 C、 D 代表另一些独立模块)。 然后你的客户程序员 (使用你设计的开发人员)只有很少的要知道你的不同接口到底是在那个类中实现的,绝大多数只是想简单的组合你的A-D 的类的接口,他并不想知道这些接口在哪里实现的。这里的客户程序员就是上面生活中想办理手续的郁闷的人!在现实生活中我们可能可以很快想到找一个人代理所有的事情就可以解决你的问题 (你只要维护和他的简单的一个接口而已了!), 在软件系统设计开发中我们可以通过一个叫做Façade 的模式来解决上面的问题。
模式结构
结论
个人理解,就是一个类将多个类的多个功能封装成一个功能函数。
Façade 模式在高层提供了一个统一的接口,解耦了系统。 设计模式中还有另一种模式
Mediator 也和 Façade 有类似的地方。但是 Mediator 主要目的是对象间的访问的解耦(通讯时候的协议),具体请参见sMediator 文档。