




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设计模式C+实现(5)原型模式、模板方法模式分类:设计模式2011-08-07 16:372075人阅读评论(1)收藏举报 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C+写了个小例子,加深一下理解。主要参考大话设计模式和设计模式:可复用面向对象软件的基础(DP)两本书。本文介绍原型模式和模板方法模式的实现。首先介绍原型模式,然后引出模板方法模式。 DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其中有一个词很重要,那就是拷贝。可以说,拷贝是原型模式的精髓所在。举个现实中的例子来介绍原型模式。找工作的时候,我们需要准备简历。假设没有打印设备,因此需手写简历,这些简历的内容都是一样的。这样有个缺陷,如果要修改简历中的某项,那么所有已写好的简历都要修改,工作量很大。随着科技的进步,出现了打印设备。我们只需手写一份,然后利用打印设备复印多份即可。如果要修改简历中的某项,那么修改原始的版本就可以了,然后再复印。原始的那份手写稿相当于是一个原型,有了它,就可以通过复印(拷贝)创造出更多的新简历。这就是原型模式的基本思想。下面给出原型模式的UML图,以刚才那个例子为实例。 原型模式实现的关键就是实现Clone函数,对于C+来说,其实就是拷贝构造函数,需实现深拷贝,下面给出一种实现。cppview plaincopyprint?1. /父类2. classResume3. 4. protected:5. char*name;6. public:7. Resume()8. virtualResume()9. virtualResume*Clone()returnNULL;10. virtualvoidSet(char*n)11. virtualvoidShow()12. ;cppview plaincopyprint?1. classResumeA:publicResume2. 3. public:4. ResumeA(constchar*str);/构造函数5. ResumeA(constResumeA&r);/拷贝构造函数6. ResumeA();/析构函数7. ResumeA*Clone();/克隆,关键所在8. voidShow();/显示内容9. ;10. ResumeA:ResumeA(constchar*str)11. 12. if(str=NULL)13. name=newchar1;14. name0=0;15. 16. else17. name=newcharstrlen(str)+1;18. strcpy(name,str);19. 20. 21. ResumeA:ResumeA()deletename;22. ResumeA:ResumeA(constResumeA&r)23. name=newcharstrlen()+1;24. strcpy(name,);25. 26. ResumeA*ResumeA:Clone()27. returnnewResumeA(*this);28. 29. voidResumeA:Show()30. coutResumeAname:nameClone();6. Resume*r4=r2-Clone();7. r1-Show();r2-Show();8. /删除r1,r29. deleter1;deleter2;10. r1=r2=NULL;11. /深拷贝所以对r3,r4无影响12. r3-Show();r4-Show();13. deleter3;deleter4;14. r3=r4=NULL;15. 最近有个招聘会,可以带上简历去应聘了。但是,其中有一家公司不接受简历,而是给应聘者发了一张简历表,上面有基本信息、教育背景、工作经历等栏,让应聘者按照要求填写完整。每个人拿到这份表格后,就开始填写。如果用程序实现这个过程,该如何做呢?一种方案就是用模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。我们的例子中,操作就是填写简历这一过程,我们可以在父类中定义操作的算法骨架,而具体的实现由子类完成。下面给出它的UML图。 其中FillResume() 定义了操作的骨架,依次调用子类实现的函数。相当于每个人填写简历的实际过程。接着给出相应的C+代码。cppview plaincopyprint?1. /简历2. classResume3. 4. protected:/保护成员5. virtualvoidSetPersonalInfo()6. virtualvoidSetEducation()7. virtualvoidSetWorkExp()8. public:9. voidFillResume()10. 11. SetPersonalInfo();12. SetEducation();13. SetWorkExp();14. 15. ;16. classResumeA:publicResume17. 18. protected:19. voidSetPersonalInfo()coutAsPersonalInfoendl;20. voidSetEducation()coutAsEducationendl;21. voidSetWorkExp()coutAsWorkExperienceendl;22. ;23. classResumeB:publicResume24. 25. protected:26. voidSetPersonalInfo()coutBsPersonalInfoendl;27. voidSetEducation()coutBsEducationendl;28. voidSe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年长庆石化分公司春季招聘(5人)模拟试卷附答案详解(完整版)
- 2025湖南乡村产业发展有限公司招聘3人模拟试卷及完整答案详解1套
- 2025国网宁夏电力有限公司博士后科研工作站博士后招聘1人模拟试卷及一套参考答案详解
- 2025贵阳农商银行“超享聘·旭日计划”大学生招聘20人模拟试卷及答案详解(历年真题)
- 2025北京首都师范大学实验小学招聘2人考前自测高频考点模拟试题及完整答案详解
- 2025广东狮山镇镇属一级公司副职领导招聘1人考前自测高频考点模拟试题及答案详解1套
- 2025北京市海淀区上地社区卫生服务中心招聘考前自测高频考点模拟试题及参考答案详解1套
- 2025内蒙古师范大学招聘事业编制人员30人模拟试卷及答案详解(典优)
- 2025河南周口市中医院招聘研究生117人模拟试卷及答案详解(各地真题)
- 2025江西吉安市文化传媒集团有限责任公司及下属子公司第一批面向社会招聘部分岗位模拟试卷附答案详解(考试直接用)
- 医院“十五五”发展规划(2026-2030)
- 教育信息化中的数字孪生技术应用案例分析
- 益海嘉里员工手册
- 膀胱镜检查术后护理常规
- 公司股权分配协议
- 光伏施工项目危险源辨识与风险评价清单(LEC法)
- 胸外科快速康复护理要点
- 独角抱杆立杆施工方案
- 小学生防校园欺凌课件
- 《SPC基本知识培训》课件
- (高清版)DB41∕T 742-2012 公路折线配筋先张法预应力混凝土梁设计施工规范
评论
0/150
提交评论