软件开发技术-原型模式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.原型模式结构及功能
• 原型管理器角色:该角色用于创建具体的 原型类对象,并且记录每一个被创建的对 象并且把已经创建过的对象保存下来。换 句话说就是先创建对象并将其保存下来 (由管理器完成)然后利用Clone()方法来 创建新对象
3.原型模式示例
原型模式示例
• 背景:
前几天,我很不幸把屋门的钥匙给弄 丢了,结果进不了家门。万幸的是,舍友那儿 还有一把,于是第二天我拿了她的那把去配钥 匙。另外,她还让我顺便给她配一把橱柜的钥 匙。现在配个钥匙真是简单,把钥匙给他,他 直接找一个合适的钥匙胚子,把我的钥匙夹在 配钥匙机的一端,胚子夹在另一端,一开电源, 一把标尺比着我的钥匙齿型走一遍,砂轮就在 胚子上复制出一把钥匙来!一分钟不到,两把 新钥匙就搞定了!
软件开发技术
原型模式
目录Content
1.原型模式的概念及特点 2.原型模式结构及功能
3.原型模式示例
4.原型模式总结
1.原型模式的概念及特点
原型模式定义
• 原型模式就是通过一个原型对象来表明要 创建的对象类型,然后用复制这个原型对 象的方法来创建更多同类型的对象。
• 原型模式允许一个对象再创建另外一个可 定制的对象,根本无需知道任何如何创建 的细节。
1.原型模式的概念及特点
原型模式与工厂模式的异同
• 原型模式应用于希望系统独立于产品的创 建、表示和构成时,这和工厂模式很类似。 事实上,和工厂模式相同的是,原型模式 同样对客户隐藏了对象的创建工作,但是, 与工厂模式通过对一个类进行实例化来构 造新对象不同的是,原型模式是通过拷贝 一个现有对象生成新对象的。工厂模式适 用于产品种类有限的情况下,当产品数量 巨大或需要提供动态产品增删等性能时, 使用原型模式具有更强的适应性。
4.原型模式总结
原型模式实现要点
• 初始化克隆对象。当一些客户对克隆对象 已经相当满意时,另一些客户将会希望使 用他们所选择的一些值来初始化该对象的 一些或是所有的内部状态。
public Key this[string name] ...{
set ...{ keys.Add(name, value); }
3.原型模式实例
//客户调用方法 public class Client ...{ public static void Main(string[] args) ...{ KeyManager keyManager = new KeyManager(); keyManager["gate"] = new GateKey(" Him "); keyManager["key2"] = new GeneralKey("key2", " Him "); keyManager["key3"] =
//客户调用方法 public class Client ...{ public static void Main(string[] args) ...{ Key oldGateKey, newGateKey, oldCabinetKey, newCabinetKey; oldGateKey = new GateKey(“Him"); newGateKey = oldGateKey.Clone(); newGateKey.Owner = "Me";
原型管理器的应用
public class KeyManager ...{ private System.Collections.Hashtabl e keys = new System.Collections.Hashtabl e(); get ...{ return (Key)keys[name]; } } }
3.原型模式实例
4.原型模式总结
原型模式的优点
• 1、运行时刻增加和删除产品。 • 2、改变值以指定新对象。 • 3、改变结构以指定新对象。 • 4、减少子类的构造。 • 5、用类动态配置应用。
4.原型type模式最主要缺点就是每个类必 须配备一个克隆方法,而且这个克隆方法 需要对类的功能进行通盘考虑,这对全新 的类来说不是很难,但对已有的类进行改 造时不一定是件容易的事。
...{public CabinetKey(string owner) : base("Cabinet Key", owner) ...{ } public override Key Clone() ...{ return new CabinetKey(this.Owner); }
}
3.原型模式实例
3.原型模式实例
使用UML序列图直观解释
3.原型模式实例
使用类图描述
3.原型模式实例
程序代码如下:
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 = owner; } //钥匙复制自身的抽象定义 public abstract Key Clone(); }
newCabinetKey.Owner = “Him";
Console.WriteLine(oldGateK ey); Console.WriteLine(newGate Key); Console.WriteLine(oldCabine tKey);
Console.WriteLine(newCabin etKey); 3.原型模式实例 }
1.原型模式的概念及特点
为什么需要原型模式?
• 在画图工具里,要画圆只需要拖动工具条的 画圆工具到绘图区即可,而不需要从头开始 一点一点地画一个圆,而且如果需要不同的 大小和颜色的圆,只需要复制几个圆,然后 再修改他们的大小和颜色即可。这就给使用 者带来了很大的方便,即使用者不需要知道 对象是如何创建的,只需要复制一个已有的 对象,然后在其上面进行修改以得到自己想 要的对象,这就是原型模式的具体应用。
keyManager["key4"] = new GeneralKey("key4", “Him"); keyManager["key5"] = new GeneralKey("key5", " Him "); Key newKey = (Key)keyManager["key2"].Cl one(); = "Office"; newKey.Owner = "Me"; }
1.原型模式的概念及特点
为什么需要原型模式?
• 引入原型模式的本质在于利用已有的一个 原型对象,快速的生成和原型对象一样的 实例。你有一个A的实例a: A a = new A();现在你想生成和A一样的一个实例b, 按照原型模式,应该是这样:A b = a. Clone();而不是重新再new一个A对象。通 过上面这句话就可以得到一个和a一样的实 例,确切的说,应该是它们的数据成员是 一样的。原型模式模式是返回了一个A对象 而没有使用new操作。
}
3.原型模式实例
//大门钥匙 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
4.原型模式总结
2.原型模式结构及功能
原型模式的一般结构
• 原型模式的一般结构如下:
2.原型模式结构及功能
原型模式的一般结构
• 客户角色:客户调用端,客户使用原型对 象复制出需要的对象。 • 抽象原型角色:定义一个原型的抽象定义, 其中包含一个复制自身的接口。 • 具体原型角色:作为原型被复制的具体对 象,需实现抽象原型所定义的接口。
4.原型模式总结
原型模式实现要点
• 使用一个原型管理器。当一个系统中原型 数目不固定时,要保持一个可用原型的注 册表。客户不会自己来管理原型,但会在 注册表中存储和检索原型。客户在克隆一 个原型前会向注册表请求该原型。我们称 这个注册表为原型管理器。 • 实现克隆操作P r o t o t y p e模式最困难 的部分在于正确实现C l o n e操作。当对 象结构包含循环引用时,这尤为棘手。
相关文档
最新文档