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

         外观模式,为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
         由于子系统可能有多个,而且联系错综复杂,作为系统的使用者,我们不想也不需要去了解这些子系统之间的联系,只需要提供一个对外接口能够实现功能即可。这就是外观模式的作用。它使得我们不用关注里面的细节和联系,却能完成功能。
       外观模式的例子很多,比如我们去酒店吃饭,我们只需要点一桌菜,然后坐等吃就可以了。至于酒店里面是谁洗菜,谁做菜,谁煲汤,于我何干,我们就只管菜美不美味。
       再说一个编程相关的例子吧。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();
	}
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值