外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 (把某些接口统一在一起,用一个接口调)
外观模式:
逻辑分析:
如一个大的系统,由不同的子模块构成,用一个类统一管理这些子模块的流程管理。
使用场景:
1:在设计大的系统时,有意识的划分模块,例如MVC模型
2:在实现一些列复杂调用时,可以对流程进行调整划分,分别实现。
源码demo:
可以增加复杂的业务,如子模块之间,模块之间的依赖关系。
#include <iostream> using namespace std; /* 构建一个大的系统时,如果子模块过多,就会需要外观模式。 用一个总的接口类,管理各个子模块,统筹调用 */ //子系统中的一组接口,就好比语法分析,生成中间代码,生成汇编代码,链接成可执行程序或库. //外观模式定义的一个高层接口,如提供一个接口Build按钮,通过这样的一个Build按钮,让编译器更加容易使用 // 语法分析子系统 class CSyntaxParser { public: void SyntaxParser() { cout<<"Syntax Parser"<<endl; } }; // 生成中间代码子系统 class CGenMidCode { public: void GenMidCode() { cout<<"Generate middle code"<<endl; } }; // 生成汇编代码子系统 class CGenAssemblyCode { public: void GenAssemblyCode() { cout<<"Generate assembly code"<<endl; } }; // 链接生成可执行应用程序或库子系统 class CLinkSystem { public: void LinkSystem() { cout<<"Link System"<<endl; } }; //通过外观模式,实现各个模块的统一调用,管理整个流程 class Facade { public: //这里可以相对调整 用类管理各个模块对象等 void Compile() { CSyntaxParser syntaxParser; CGenMidCode genMidCode; CGenAssemblyCode genAssemblyCode; CLinkSystem linkSystem; syntaxParser.SyntaxParser(); genMidCode.GenMidCode(); genAssemblyCode.GenAssemblyCode(); linkSystem.LinkSystem(); } }; // 客户端 int main() { Facade facade; facade.Compile(); return 0; }