设计模式c实现(5)——原型模式、模板方法模式

设计模式c实现(5)——原型模式、模板方法模式

ID:35436533

大小:124.94 KB

页数:5页

时间:2019-03-24

设计模式c实现(5)——原型模式、模板方法模式_第1页
设计模式c实现(5)——原型模式、模板方法模式_第2页
设计模式c实现(5)——原型模式、模板方法模式_第3页
设计模式c实现(5)——原型模式、模板方法模式_第4页
设计模式c实现(5)——原型模式、模板方法模式_第5页
资源描述:

《设计模式c实现(5)——原型模式、模板方法模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、设计模式C++实现(5)——原型模式、模板方法模式分类:设计模式2011-08-0716:372075人阅读评论⑴收藏举报软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》(DP)两本书。本文介绍原型模式和模板方法模式的实现。首先介绍原型模式,然后引出模板方法模式。DP书上的定义为:用原型

2、实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其中有一个词很重要,那就是拷贝。可以说,拷贝是原型模式的精髓所在。举个现实中的例子来介绍原型模式。找工作的时候,我们需要准备简历。假设没有打印设备,因此需手写简历,这些简历的内容都是一样的。这样有个缺陷,如果要修改简历中的某项,那么所有已写好的简历都要修改,工作量很大。随着科技的进步,出现了打印设备。我们只需手写一份,然后利用打印设备复印多份即可。如果要修改简历屮的某项,那么修改原始的版本就可以了,然后再复印。原始的那份手写稿相当于是一个原型,有了它,就可以通过复印(拷贝)创造出更多的新简历。这就是原型模式的

3、基本思想。下面给出原型模式的UML图,以刚才那个例子为实例。prototype二Resume^«virtual»CloneQResumeAResumeB♦CloneQ•Clone。原型模式实现的关键就是实现Clone函数,对于C++来说,其实就是拷贝构造函数,需实现深拷贝,下面给出一种实现。[cpp]viewplaincopyprint?1.〃父类2.classResume3.{4.protected:5.char*name;6.public:7.Resume(){}8.virtual-Resume(){}9.virtualResume*Clone(){return

4、NULL;}10.virtualvoidSet(char*n){}11-virtualvoidShow(){}12.};[cpp]viewplaincopyprint?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*s

5、tr)11.12.if(str==NULL){13.name=newchar[l];name[0]='';else{17.name=newchar[strien(str)+l];strcpy(name^str);19.20.21.ResumeA::^ResumeA(){delete[]name;}22.ResumeA::ResumeA(constResumeA&r){23.name=newchar[strien(r.name)+l];24.strcpyCname^r•name);26.ResumeA*ResumeA::Clone(){27.returnnewRe

6、sumeA(*this);29.voidResumeA::Show(){30.cout<<"ResumeAname:u<Clone();6.Resume*r4=r2->Clone();7.rl->Show();r2->Show();8.//删除

7、rl,r29.deleterl;deleter2;10.rl=r2=NULL;11.//深拷贝所以对r3,r4无影响12.r3->Show();r4->Show();13.deleter3;deleter4;14.r3=r4=NULL;15.}最近有个招聘会,可以带上简历去应聘了。但是,其中有一家公司不接受简历,而是给应聘者发了一张简历表,上面有基本信息、教育背景、工作经历等栏,让应聘者按照要求填写完整。每个人拿到这份表格后,就开始填写。如果用程序实现这个过程,该如何做呢?一种方案就是用模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法

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

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

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