1 意图:为子系统中的一组接口提供一个一直的界面,Facade模式定义了一个高层接口。这个接口使得这一子系统更加容易使用,

2 动机,便于不需要更多功能的人通过Facade 简化使用

3 适用性:

. 为复杂子系统提供一个简单接口。

. 客户程序与抽象类的实现部分之间存在着很大的依赖性。Facade提高子系统的独立性

. 当你需要构建一个层次结构的子系统时,可以仅通过facade通讯,简化之间的依赖性

4 参与者:

. Facade:知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象

. Subsystem classes:实现子系统的功能。处理由Facade对象指派的任务。没有Facade的任何信息,没有指向Facade的指针

5 协作:

. 客户通过发送请求给Facade的方式与子系统通讯。

. 使用Facade的客户不需要直接使用子系统

6 效果:

. 对客户屏蔽子系统组件

. 实现子系统与客户之间的松耦合关系

. 如果必要,客户可以直接使用子系统

7 实现:

1)降低客户-子系统间的耦合度:用抽象类实现Facade而它的具体子类对应于不同的子类系统实现,降低客户与子系统的耦合度

2)公共子系统与私有子系统

子系统的公共接口包含所有的客户程序可以访问的类;私有接口仅用于对子系统进行扩充。

8 相关模式:

. Abstract Factory 与Facade一起使用以提供一个接口,这一接口可用来以一种子系统独立的方式创建子系统对象。

. Meidiator与Facade有点像,抽象了一些已有的功能。Mediator是使得同事间的任何通讯进行抽象,通常集中不属于任何单个对象的功能。

Mediator的同事知道中介者并与它通信,而不是直接与其他同事通信。Facade仅对子系统对象的接口抽象,更易于使用,不定义新功能,子系统也不知道Facade的存在

. 只需要一个Facade时,使用singleton

05-11 11:28