通过例子学设计模式之--外观模式以及使用场景说明(C++实现)

来源:互联网 发布:ubuntu 删除文件 编辑:程序博客网 时间:2024/06/15 06:56
外观模式,为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
由于子系统可能有多个,而且联系错综复杂,作为系统的使用者,我们不想也不需要去了解这些子系统之间的联系,只需要提供一个对外接口能够实现功能即可。这就是外观模式的作用。它使得我们不用关注里面的细节和联系,却能完成功能。
       外观模式的例子很多,比如我们去酒店吃饭,我们只需要点一桌菜,然后坐等吃就可以了。至于酒店里面是谁洗菜,谁做菜,谁煲汤,于我何干,我们就只管菜美不美味。
       再说一个编程相关的例子吧。Linux下开发程序,我们可以通过编写Makefile编译,也可以通过QT编译,当然也有其它的方式。这些方式基本都会包括查找头文件,编译,链接,生成可执行文件等步骤。对于开发者来说,我们只需要执行命令,然后坐等编译结果即可。至于中间各个编译子系统之家的复杂关系,我们根本不用理会。

      这里用C++代码实现这个例子的外观模式,各个子系统用一个类来说明,同时为了使得例子简单,子系统用stataic静态函数说明,具体代码如下:

void TestFacade(){ProgramBuilder* b = new MakeBuider;printf("输入了Make命令执行编译:\r\n\r\n");b->Build();delete b;}class FindMakeFile{public: static void Find(){printf("查找Makefile文件,如果查找不到报错\r\n");}};class SearchHeaderFiles{public:static void Search(){printf("查找附加包含头文件等路径,搜索相关的头文件\r\n");}};class Compiler{public:static void Compile(){printf("调用gcc或者g++执行编译动作\r\n");}};class Linker{public:static void Link(){printf("调用ldd等链接库操作\r\n");}};class OutputPorgram{public:static void Output(){printf("生成并输出可执行程序文件\r\n");}};//构建编译程序class ProgramBuilder{public:virtual void Build() = 0;};//通过Make命令只是构建程序class MakeBuider : public ProgramBuilder{public:virtual void Build(){FindMakeFile::Find();SearchHeaderFiles::Search();Compiler::Compile();Linker::Link();OutputPorgram::Output();}};



阅读全文
0 0