每日设计模式——外观模式

来源:互联网 发布:淘宝卖家能否取消订单 编辑:程序博客网 时间:2024/04/29 10:35

      今天终于能早点了,感觉真好~其实是外观模式比较简单,理解起来比较容易。

      外观模式,为子系统中一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。当出现以下几种情况时适合使用外观模式,1.为一个复杂的子系统提供一个简单的接口;2.客户程序与抽象类的实现部分之间存在很大的依赖性,引入外观模式将这个子系统与客户及其他子系统奋力,提高子系统的独立性和可移植性;3.构建层次子系统时,使用外观模式定义子系统中每层的入口点。

      《大话设计模式》举得例子是买基金和买股票。投资者并不一定是炒股专家,在购买股票的时候很难合理的投资获取收益,相当一部分都是在赔钱,所以让投资者自己去投资股票或者其他投资产品的话,他们要花大量的时间和精力去了解相关信息,而且还不见得能实现赚钱这个最终目的。但是投资者可以选择一支比较好的基金来购买,基金经理获取大量的投资者汇集起来钱进行投资,和各种股票及投资产品打交道。而且通常情况下,基金经理是投资方面的专业人士,做出的选择更加合理科学。这个时候,客户就不关心具体的股票或者投资产品了,只要关注基金的涨跌即可。

      根据Gof对于外观模式的描述,这个模式主要用于分层,其实可以想到系统开发过程中数据持久层,业务逻辑层这些的划分。我觉得举一个比较实际的例子来说就是qq秀,我们可以自己定制qq秀,这相当于对子系统的直接操作。而同时,系统给我们定制了一些成型的成套的qq秀,不需要我们自己搭配,我们只要挑一套自己满意的即可。这就是外观模式的一个典型的应用。

      在古剑里,预定义的战技组合快捷键就应该是一个外观模式,当然这体现在战斗中,在非战斗情况下的定义过程不是。那个定义战技组合快捷键的过程应该就是构建外观类的调用方法的过程。而战斗中使用快捷键其实就是不用考虑具体用什么技能,而是用什么快捷键的问题。这个例子举得好牵强啊,我回头再想想有没有更合适的例子。

       实现代码如下,不得不再感慨一下外观类如此简单,只有两层,而且没有多态……

 

subSystemOne.h 文件

 

subSystemOne.CPP 文件

 

subSystemTwo.h 文件

 

subSystemTwo.cpp 文件


subSystemThree.h 文件

 

subSystemThree.cpp 文件

 

subSystemFour.h 文件

 

subSystemFour.cpp 文件

 

facade.h 文件

 

facade.cpp 文件

 

main.cpp 文件

 

运行结果

 

嗯,外观模式简单吧,与之前的各种模式相比,外观模式实在是太简单了~今天终于能早点睡了~好高兴~