意图:为子系统中一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得子系统更加容易调用。
动机: 将一个系统划分成若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一就是引入一个外观对象,它为子系统中较为一般的设施提供了一个单一而又简单的界面。
适用性:
当你要为复杂子系统提供一个简单的接口时;客户程序与抽象类的实现部分之间存在着很大的依赖性;当你需要构建一个层次结构的子系统时,使用Façade模式定义子系统中每层的入口点。
结构:
参与者:
Façade : 知道哪些子系统类负责处理请求;将客户的请求代理给适当的子系统对象
SublSystem classes: 实现子系统的功能;处理由façade对象指派的任务;没有Façade的任何相关信息。
协作:客户程序通过发送请求给façade的方式与子系统通信,façade将这些消息转发给适当的子系统对象,尽管是子系统中的有关对象在做实际工作,但façade某事本想必须将它的接口转换成子系统的接口。使用façade的客户程序不需要直接访问子系统对象。
效果:
他对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。
它实现了子系统与客户之间的松耦合关系,而子系统内部往往是紧耦合的。
实现:
代码示例如下:
1 |
|