Demo:以编译器子系统的设计为例,说明外观模式的思想:
子系统类划分:Scanner, Parser, ProgramNode, BytecodeStream, ProgramNodeBuilder
要求:对普通用户提供一个高层的,单一而简单的编译子系统接口
对高级专业的用户提供底层功能,可以直接访问具体的子系统类。
设计:
Compiler类(关键),其职责为两点:
1)为用户屏蔽子系统,提供一个高层的简单的使用接口;
2)不完全隐藏实现编译功能的那些子系统类,使得少数懂的如何使用底层功能的人可以调用这些功能。
适用性:
在遇到以下情况使用Facade模式:
- 为一个复杂子系统提供一个简单接口。
- 客户程序与抽象类的实现部分之间存在很大的依赖性。
- 当你需要构件一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,可以让它们仅通过facade进行通讯,从而简化了它们之间的依赖关系。
结构: