原型模式创新.pptVIP

  • 10
  • 0
  • 约3.13千字
  • 约 25页
  • 2016-02-06 发布于湖北
  • 举报
Design Patterns 原型模式 河南理工大学 大纲 原型模式概述 原型模式的结构与实现 原型模式的应用实例 原型管理器 原型模式的优缺点与适用环境 原型模式概述 孙悟空“拔毛变小猴” 原型模式概述 分析 孙悟空:根据自己的形状复制(克隆)出多个身外身 软件开发:通过复制一个原型对象得到多个与原型对象一模一样的新对象 原型模式概述 原型模式的定义 对象创建型模式 原型模式:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。 Prototype Pattern: Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype. 原型模式概述 原型模式的定义 工作原理:将一个原型对象传给要发动创建的对象(即客户端对象),这个要发动创建的对象通过请求原型对象复制自己来实现创建过程 创建新对象(也称为克隆对象)的工厂就是原型类自身,工厂方法由负责复制原型对象的克隆方法来实现 通过克隆方法所创建的对象是全新的对象,它们在内存中拥有新的地址,每一个克隆对象都是独立的 通过不同的方式对克隆对象进行修改以后,可以得到一系列相似但不完全相同的对象 原型模式的结构与实现 原型模式的结构 原型模式的结构与实现 原型模式的结构 原型模式包含以下3个角色: Prototype(抽象原型类) ConcretePrototype(具体原型类) Client(客户类) 原型模式的结构与实现 浅克隆与深克隆 浅克隆(Shallow Clone):当原型对象被复制时,只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制 原型模式的结构与实现 浅克隆与深克隆 深克隆(Deep Clone):除了对象本身被复制外,对象所包含的所有成员变量也将被复制 原型模式的结构与实现 原型模式的实现 通用的克隆实现方法 abstract class Prototype { public abstract Prototype Clone(); } class ConcretePrototype : Prototype { private string attr; //成员变量 public string Attr { get { return attr; } set { attr = value; } } //克隆方法 public override Prototype Clone() { ConcretePrototype prototype = new ConcretePrototype(); prototype.Attr = attr; return prototype; } } …… ConcretePrototype prototype = new ConcretePrototype(); ConcretePrototype copy = (ConcretePrototype)prototype.Clone(); …… 原型模式的应用实例 实例说明 在使用某OA系统时,有些岗位的员工发现他们每周的工作都大同小异,因此在填写工作周报时很多内容都是重复的,为了提高工作周报的创建效率,大家迫切地希望有一种机制能够快速创建相同或者相似的周报,包括创建周报的附件。试使用原型模式对该OA系统中的工作周报创建模块进行改进。 原型模式的应用实例 实例类图 工作周报创建模块结构图 原型模式的应用实例 结果及分析 周报对象被成功复制,但是附件对象并没有复制,实现了浅克隆 周报是否相同?否 附件是否相同?是 原型模式 原型模式实例与解析 实例一:邮件复制(浅克隆) 由于邮件对象包含的内容较多(如发送者、接收者、标题、内容、日期、附件等),某系统中现需要提供一个邮件复制功能,对于已经创建好的邮件对象,可以通过复制的方式创建一个新的邮件对象,如果需要改变某部分内容,无须修改原始的邮件对象,只需要修改复制后得到的邮件对象即可。使用原型模式设计该系统。在本实例中使用浅克隆实现邮件复制,即复制邮件(Email)的同时不复制附件(Attachment)。 原型模式 原型模式实例与解析 实例一:邮件复制(浅克隆) 原型模式 原型模式实例与解析 实例二:邮件复制(深克隆) 使用深克隆实现邮件复制,即复制邮件的同时复制附件。 原型模式 原型模式实例与解析 实例二:邮件复制(深克隆) 原型管理器 定义

文档评论(0)

1亿VIP精品文档

相关文档