设计模式原型模式Prototype)

设计模式原型模式Prototype)

ID:36512208

大小:68.18 KB

页数:9页

时间:2019-05-11

设计模式原型模式Prototype)_第1页
设计模式原型模式Prototype)_第2页
设计模式原型模式Prototype)_第3页
设计模式原型模式Prototype)_第4页
设计模式原型模式Prototype)_第5页
资源描述:

《设计模式原型模式Prototype)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、设计模式原型模式(Prototype)-面馆里的菜单设计模式-原型模式 参考资料《c#技术揭密》《设计模式-可复用面向对象软件的基础》《java与模式》很多餐馆里面都有菜单,列举了他们提供哪些饭菜,哪种面食等,一般的兰州拉面馆里菜单是这样的牛肉拉面(大碗)牛肉拉面(小碗)牛肉刀削面羊肉拉面羊肉刀削面你到了这里,你说我要吃手擀面,我要吃挂面,我要吃珍珠翡翠鲍鱼面,他恐怕没有,这些面就需要定制,上面说的牛肉拉面,牛肉刀削面等可以看作是原型,面馆可以看作是原型管理器。原型模式在创建对象不是直接创建的,也就是说,不是通过外部调用类的构造函数调用的,而是通过已存在的对象实例克隆出一个对象,这个克隆对象和

2、他的源对象具有相同的属性和状态,也就是说面馆里的牛肉刀削面每一碗状态都是一样的。克隆对象分为浅拷贝和深拷贝浅拷贝就是克隆的对象和它的源对象共享引用的对象,举个例子,可能不恰当,假设牛肉刀削面引用一个对象:Money,表示它值多少钱,这里说的对象是说它是System.Object继承的(c#),也就是说不同的浅拷贝对象,他们的价钱是一样的,当克隆对象的价钱变过之后,它所引用的对象的价钱也就随之改变了,比如面馆调低了牛肉刀削面的价格,由5块钱调到了4块钱,那么每碗面的价格都变到了四块钱。但对值类型而言,每个浅拷贝对象都有自己的拷贝,也就是说,当改变克隆对象的值类型时,它的源对象相应属性不会改变。深

3、拷贝就是完全的拷贝不仅值类型有自己的拷贝,连引用对象也有自己的一份拷贝,修改克隆对象的任何属性,也不会对源对象产生任何影响。原型管理器,就是提供原型注册使用,当创建对象使,可以使用里面的对象进行克隆,当有新的实例对象时,也可以将他们加到原型管理器里。说的有点乱,程序员,还是用代码交流最好,下面的程序分别实现了原型克隆时浅拷贝和深拷贝。////理解深拷贝和浅拷贝////浅表副本创建与原始对象具有相同类型的新实例,然后复制原始对象的非静态字段。//如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制该//引用但不复制被引用的对象;这样,原始对象中的引用和复本中的引用指向同一个对象

4、。//相反,对象的深层副本复制对象中字段直接或间接引用的全部内容。////例如,如果X是一个具有对对象A和对象B的引用的Object,并且对象A还具//有对对象M的引用,则X的浅表副本是对象Y,而Y同样具有对对象A和对象B//的引用。相反,X的深层副本是对象Y,而对象Y具有对对象C和对象D的直接引//用以及对对象N的间接引用,其中C是A的副本,D是B的副本,而N是M的副本。usingSystem;usingSystem.Collections;usingSystem.IO;usingSystem.Runtime.Serialization.Formatters.Binary;usingSyst

5、em.Runtime.Serialization;usingSystem.Data;namespacePrototype{     ///

     ///Prototype类型实例     ///     classTestPrototypeApp     {          ///          ///应用程序的主入口点。          ///          [STAThread]      staticvoidMain(string[]args)      {           //定义原型管理器 

6、          NoodleManagernoodleManager=newNoodleManager();              //客户要求下面三碗面           NoodlebeefNoodle=(Noodle)noodleManager["牛肉拉面"].Clone();          // NoodlebeefNoodle=(Noodle)noodleManager["牛肉拉面"].DeepClone();           NoodlemuttonNoodle=(Noodle)noodleManager["羊肉拉面"].Clone();           No

7、odlebeefCutNoodle=(Noodle)noodleManager["牛肉刀削面"].Clone();           //修改克隆对象中的引用对象的属性,验证它是浅拷贝还是深拷贝           beefNoodle.TbName=",哈哈哈!,克隆对象改名了,你改不改";           //显示原始对象的NoodelName和TbName            Con

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

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

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