设计模式C实现(7)——外观模式、组合模式

设计模式C实现(7)——外观模式、组合模式

ID:42855295

大小:200.61 KB

页数:7页

时间:2019-09-22

设计模式C实现(7)——外观模式、组合模式_第1页
设计模式C实现(7)——外观模式、组合模式_第2页
设计模式C实现(7)——外观模式、组合模式_第3页
设计模式C实现(7)——外观模式、组合模式_第4页
设计模式C实现(7)——外观模式、组合模式_第5页
资源描述:

《设计模式C实现(7)——外观模式、组合模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、设计模式。++实现(7)―卜观模式、组合模式分类:设计模式2011-08-0722:341746人阅读评论(5)收藏举报软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重耍特性:封装、继承、多态,真正领悟设计模式的粘髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主耍参考《大话设计模式》和《设计模式:可复用面向对象软件的皋础》(DP)两本书。本文介绍外观模式和组合模式的实现。外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统捉供给客户的是

2、一个简单的对外接口,而把里面复杂的结构都封装了起来。客户只需使用这些简单接口就能使用这个系统,而不需耍关注内部复杂的结构。DP—书的定义:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。举个编译器的例子,假设编译一个程序需要经过四个步骤:词法分析、语法分析、中间代码生成、机器码生成。学过编译都知道,每一步都很复杂。对于编译器这个系统,就可以使用外观模式。可以定义一个高层接口,比如名为Compiler的类,里面有一个名为Run的函数。客户只需调用这个函数就可以编译程序,至于Run函数内部的具体操作,客户无需知道。下面给出

3、UML图,以编译器为实例。ClientCompiler•Run。相应的代码实现为:[cpp]viewplaincopyprint?GenMidCode^GenCodeQGenMachineCode^GenCodeQ1.classSeanner2.{3・public:4.voidScan(){cout<<"词法分析"<

4、enMachineCode{public:voidGenCode(){cout<<"产生机器码u<

5、Compilercompiler;4.compiler.Run();5・return0;6.}这就是外观模式,它有几个特点(摘自DP一书),(1)它对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。(2)它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。(3)如果应用需要,它并不限制它们使用子系统类。结合上面编译器这个例子,进一步说明。对于(1),编译器类对客户屏蔽了子系统组件,客户只需处理编译器的对象就可以方便的使用子系统。对于(2),子系统的变化,不会影响到客户的使用,体现了子系统与客户的松耦合关系。对于(3),

6、如果客户希望使用词法分析器,只需定义词法分析的类对象即可,并不受到限制。外观模式在构建大型系统时非常有用。接下来介绍另一种模式,称为组合模式。感觉有点像外观模式,刚才我们实现外观模式时,在Compiler这个类屮包含了多个类的对象,就像把这些类组合在了一起。组合模式是不是这个意思,有点相似,其实不然。DP书上给出的定义:将对象组合成树形结构以表示“部分■整体”的层次结构。组合使得用户对单个对象和组合对象的使用具有一致性。注意两个字“树形”。这种树形结构在现实生活中随处可见,比如一个集团公司,它有一个母公司,下设很多家子公司。不管是母公司述是子公司,都有各自直属的财务部、人力

7、资源部、销售部等。对于母公司来说,不论是子公司,还是直属的财务部、人力资源部,都是它的部门。整个公司的部门拓扑图就是一个树形结构。下面给出组合模式的UML图。从图中可以看到,FinanceDepartment>HRDepartment两个类作为叶结点,因此没有定义添加函数。而ConcreteCompany类可以作为中间结点,所以可以有添加函数。那么怎么添加呢?这个类屮定义了一个链表,用来放添加的元素。相应的代码实现为:[cpp]viewplaincopyprint?1-classCompany2・{1.public

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。