意图
facade模式为复杂子系统定义了一些统一的接口,使得这一子系统更加容易使用。一、外观模式的适用性
适用性:
1.当你要为一个复杂子系统提供一个简单接口且不想给不需要定制子系统的用户带来使用上的困难时,facade可以提供一个简单的缺省接口,这对大多数不需要定制子系统的用户来说已经足够。
2.若客户程序与抽象类的实现部分存在很大的依赖性,想将子系统与客户代码以及其它子系统分离。
3.当你需要建立一个层次结构的子系统时,若子系统之间是相互依赖的,可以让它们仅通过facade进行通信,从而简化了它们之间的依赖关系。
二、实际例子与实现
1.场景介绍
C语言的编译器为例:
这里根据编译的过程,将编译系统分为四个子系统,分别为Pretreatment (预处理)、Compile(编译)、Assembly(汇编)、Link(链接):
若按照一般方法构建整个编译系统,倘若用户根本不关心各个编译子系统的细节,而且客户不想因为底层子系统的改变而改变自己的代码,这里就可以使用facade模式作为中间层,给客户使用。
倘若客户关心子系统的相关细节,绕过facade层即可。
2.例子类图
3.C++代码实现