




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计模式之 原型模式,Prototype,目录Content,原型模式定义,原型模式就是通过一个原型对象来表明要创建的对象类型,然后用复制这个原型对象的方法来创建更多同类型的对象。 原型模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节。,1.原型模式的概念及特点,为什么需要原型模式?,在画图工具里,要画圆只需要拖动工具条的画圆工具到绘图区即可,而不需要从头开始一点一点地画一个圆,而且如果需要不同的大小和颜色的圆,只需要复制几个圆,然后再修改他们的大小和颜色即可。这就给使用者带来了很大的方便,即使用者不需要知道对象是如何创建的,只需要复制一个已有的对象,然后在其上面进行
2、修改以得到自己想要的对象,这就是原型模式的具体应用。,1.原型模式的概念及特点,为什么需要原型模式?,引入原型模式的本质在于利用已有的一个原型对象,快速的生成和原型对象一样的实例。你有一个A的实例a: A a = new A();现在你想生成和A一样的一个实例b,按照原型模式,应该是这样:A b = a. Clone();而不是重新再new一个A对象。通过上面这句话就可以得到一个和a一样的实例,确切的说,应该是它们的数据成员是一样的。原型模式模式是返回了一个A对象而没有使用new操作。,1.原型模式的概念及特点,原型模式与工厂模式的异同,原型模式应用于希望系统独立于产品的创建、表示和构成时,这
3、和工厂模式很类似。事实上,和工厂模式相同的是,原型模式同样对客户隐藏了对象的创建工作,但是,与工厂模式通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。工厂模式适用于产品种类有限的情况下,当产品数量巨大或需要提供动态产品增删等性能时,使用原型模式具有更强的适应性。,原型模式的一般结构,原型模式的一般结构如下:,原型模式的一般结构,客户角色:客户调用端,客户使用原型对象复制出需要的对象。 抽象原型角色:定义一个原型的抽象定义,其中包含一个复制自身的接口。 具体原型角色:作为原型被复制的具体对象,需实现抽象原型所定义的接口。,原型管理器角色:该角色用于创建具体
4、的原型类对象,并且记录每一个被创建的对象并且把已经创建过的对象保存下来。换句话说就是先创建对象并将其保存下来(由管理器完成)然后利用Clone()方法来创建新对象,原型模式示例,背景: 前几天,我很不幸把屋门的钥匙给弄丢了,结果进不了家门。万幸的是,舍友那儿还有一把,于是第二天我拿了她的那把去配钥匙。另外,她还让我顺便给她配一把橱柜的钥匙。现在配个钥匙真是简单,把钥匙给他,他直接找一个合适的钥匙胚子,把我的钥匙夹在配钥匙机的一端,胚子夹在另一端,一开电源,一把标尺比着我的钥匙齿型走一遍,砂轮就在胚子上复制出一把钥匙来!一分钟不到,两把新钥匙就搞定了!,使用UML序列图直观解释,使用类图描述,程
5、序代码如下:,namespace 原型模式 . /抽象钥匙原型 public abstract class Key . private string name; public string Name . get . return name; set . name = value; private string owner; public string Owner . get . return owner; set . owner = value; public Key(string name, string owner) . = name; this.owner = own
6、er; /钥匙复制自身的抽象定义 public abstract Key Clone(); ,/大门钥匙 public class GateKey : Key .public GateKey(string owner) : base(Gate Key, owner) . public override Key Clone() . return new GateKey(this.Owner); /橱柜钥匙 public class CabinetKey : Key .public CabinetKey(string owner) : base(Cabinet Key, owner) . publ
7、ic override Key Clone() . return new CabinetKey(this.Owner); ,/客户调用方法 public class Client . public static void Main(string args) . Key oldGateKey, newGateKey, oldCabinetKey, newCabinetKey; oldGateKey = new GateKey(“Him); newGateKey = oldGateKey.Clone(); newGateKey.Owner = Me; oldCabinetKey = new Cab
8、inetKey(Me); newCabinetKey = oldCabinetKey.Clone(); newCabinetKey.Owner = “Him; Console.WriteLine(oldGateKey); Console.WriteLine(newGateKey); Console.WriteLine(oldCabinetKey); Console.WriteLine(newCabinetKey); ,原型管理器的应用,public class KeyManager . private System.Collections.Hashtable keys = new System
9、.Collections.Hashtable(); public Key thisstring name . set . keys.Add(name, value); get . return (Key)keysname; ,/客户调用方法 public class Client . public static void Main(string args) . KeyManager keyManager = new KeyManager(); keyManagergate = new GateKey( Him ); keyManagerkey2 = new GeneralKey(key2, H
10、im ); keyManagerkey3 = new GeneralKey(key3, Him ); keyManagerkey4 = new GeneralKey(key4, “Him); keyManagerkey5 = new GeneralKey(key5, Him ); Key newKey = (Key)keyManagerkey2.Clone(); newKey.Name = Office; newKey.Owner = Me; ,原型模式的优点,1、运行时刻增加和删除产品。 2、改变值以指定新对象。 3、改变结构以指定新对象。 4、减少子类的构造。 5、用类动态配置应用。,原型模式的缺点,Prototype模式最主要缺点就是每个类必须配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时不一定是件容易的事。,原型模式实现要点,使用一个原型管理器。当一个系统中原型数目不固定时,要保持一个可用原型的注册表。客户不会自己来管理原型,但会在注册表中存储和检索原型。客户在克隆一个原型前会向注册表请求该原型。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备材料购销合同范本
- 装饰广告简易合同范本
- 豪华餐厅装修合同范本
- 艺人签约广告合同范本
- 家庭窗帘安装服务合同(2篇)
- 变更履行主体 合同范本
- 玻璃沙发采购合同范本
- 2025至2030年中国手术室抗静电地板市场现状分析及前景预测报告
- 2025至2030年中国成品纸行业投资前景及策略咨询报告
- 2025至2030年中国微机自动电位滴定仪市场现状分析及前景预测报告
- 《气胸护理查房》课件
- 《我的心灵疗愈》
- 中国教育史(第四版)全套教学课件
- 2022年4月自考02400建筑施工(一)试题及答案含评分标准
- 志愿者申请登记表
- 第七讲-信息技术与大数据伦理问题-副本
- 债权转让执行异议申请书范本
- (完整版)数字信号处理教案(东南大学)
- 向政府申请项目资金申请报告
- 旅游心理学个性与旅游行为课件
- 超越广告-南京林业大学中国大学mooc课后章节答案期末考试题库2023年
评论
0/150
提交评论