prototype pattern称为原型模式

prototype pattern称为原型模式

ID:40300865

大小:89.50 KB

页数:4页

时间:2019-07-30

prototype pattern称为原型模式_第1页
prototype pattern称为原型模式_第2页
prototype pattern称为原型模式_第3页
prototype pattern称为原型模式_第4页
资源描述:

《prototype pattern称为原型模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、在软件系统中,经常面临着“某些结构复杂的对象”的创建工作,由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。Prototype设计模式,就是为了解决如何向“客户程序”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求的改变而改变。Prototype设计模式指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。要点:·Prototype设计模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。·Prot

2、otype设计模式对于“如何创建易变类的实体对象”采用“原型克隆”的方法来做,它使得我们可以非常灵活地动态创建“拥有某些稳定接口”的新对象,所需要的工作仅仅是注册一个新类的对象(即原型),然后在需要的地方不断地Clone·Clone时要注意使用DeepClone。深拷贝与浅拷贝区别:浅拷贝也称位拷贝,就是对象的数据成员之间的简单赋值,例如一个类我们没有具体定义其拷贝构造函数当用该类的一个对象去给令一个对象赋值时所执行的过程就是浅拷贝。如果对象中没有其他的资源(如:堆,文件,系统资源等),则深拷贝和浅拷贝没有什

3、么区别,但是如果有那么浅拷贝只是简单的引用这些资源,而深拷贝是会复制这些资源的。举例说明:1classPeople2{3public:4People(Hair*ha,inta)5:h(ha),age(a)6{}7private:8Hair*h;9intage;10};11Hair*ha=newHair(....);12Peoplep1(ha,a);13Peoplep2=p1;//浅拷贝p2.h=p1.h,p2.age=p1.age那么如果是浅拷贝(位拷贝)只是简单的将Hair*h指针指向ha指针指向的资源。那

4、么这里想象下这里如果在销毁p1的时候我们会释放p1.h所指向的资源,那么在使用p2就会发生错误!!所以我们平常应该尽量少使用浅拷贝,这会给程序带来危害。当然从这里我们也可以得知,如果没有资源,深浅拷贝是没有任何区别的。 下面接着看原型模式:1classwheel2{3public:4wheel(std::stringn,intl)5:name(n),loadCapacity(l)6{}7wheel()8:name(""),loadCapacity(0)9{}10voidshow();11wheel*Clone

5、();12private:13std::stringname;14intloadCapacity;15};16voidwheel::show()17{18std::cout<<"Thewheelnameis"<

6、7classCar28{29public:30Car(std::stringcolor,wheel*w,std::stringengine)3132:_color(color),_wheel(w),_engine(engine)33{}34virtualCar*Clone()=0;35virtualvoidShow()=0;36virtualvoidsetColor(std::stringcolor)=0;37virtual~Car(){}38protected:39std::string_color;40/

7、/有一个资源41wheel*_wheel;42std::string_engine;43};4445classBenzCar:publicCar46{47public:48BenzCar(std::stringcolor,wheel*w,std::stringengine)49:Car(color,w,engine)50{}51~BenzCar();52voidShow();53Car*Clone();54voidsetColor(std::stringcolor);55};5657BenzCar::~Ben

8、zCar()58{59delete_wheel;60}61Car*BenzCar::Clone()62{63wheel*l=_wheel.Clone();64Car*pc=newBenzCar(_color,l,_engine);65returnpc;66}67voidBenzCar::Show()68{69std::cout<<"Thecar'scoloris"<<_color<

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

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

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