预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共32页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第第88章章 原型模式原型模式 主讲教师:程细柱韶关学院计算机系 本书主编:刘伟清华大学出版社 本章教学内容 原型模式 模式动机与定义 模式结构与分析 模式实例与解析 模式效果与应用 模式扩展 原型模式 模式动机 原型模式 模式动机 在面向对象系统中,使用原型模式来复制一个对象自 身,从而克隆出多个与原型对象一模一样的对象。 在软件系统中,有些对象的创建过程较为复杂,而且有 时候需要频繁创建,原型模式通过给出一个原型对象来 指明所要创建的对象的类型,然后用复制这个原型对象 的办法创建出更多同类型的对象,这就是原型模式的意 图所在。 原型模式 模式定义 原型模式(PrototypePattern):原型模式是一种对象 创建型模式,用原型实例指定创建对象的种类,并且通 过复制这些原型创建新的对象。原型模式允许一个对象 再创建另外一个可定制的对象,无须知道任何创建的细 节。 原型模式的基本工作原理是通过将一个原型对象传给那 个要发动创建的对象,这个要发动创建的对象通过请求 原型对象拷贝原型自己来实现创建过程。 原型模式 模式定义 PrototypePattern:Specifythekindofobjectsto createusingaprototypicalinstance,andcreate newobjectsbycopyingthisprototype. Frequencyofuse:medium 原型模式 模式结构 ClientPrototype -prototype:Prototypeprototype -copy:Prototype+clone():Prototype +operation() ConcretePrototypeAConcretePrototypeB ...... copy=prototype.clone();+clone():Prototype+clone():Prototype ...... returncopyofself; 原型模式 模式结构 原型模式包含如下角色: •Prototype:抽象原型类 •ConcretePrototype:具体原型类 •Client:客户类 原型模式 模式分析 在原型模式结构中定义了一个抽象原型类,所 有的Java类都继承自java.lang.Object,而 Object类提供一个clone()方法,可以将一个 Java对象复制一份。因此在Java中可以直接使 用Object提供的clone()方法来实现对象的克 隆,Java语言中的原型模式实现很简单。 能够实现克隆的Java类必须实现一个标识接口 Cloneable,表示这个Java类支持复制。如果 一个类没有实现这个接口但是调用了clone()方 法,Java编译器将抛出一个 CloneNotSupportedException异常。 原型模式 模式分析 示例代码: publicclassPrototypeDemoimplementsCloneable { …… publicObjectclone() { Objectobject=null; try{ object=super.clone(); }catch(CloneNotSupportedExceptionexception){ System.err.println("Notsupportcloneable"); } returnobject; } …… } 原型模式 模式分析 通常情况下,一个类包含一些成员对象,在使 用原型模式克隆对象时,根据其成员对象是否 也克隆,原型模式可以分为两种形式:深克隆 和浅克隆。 原型模式 模式分析 浅克隆:仅仅复制所考虑的对象,不复制它所引用的成 员对象。 深克隆:两者都复制。 浅克隆浅克隆 深克隆深克隆 原型模式 模式分析 Java语言提供的clone()方法将对象复制了一份并返回 给调用者。一般而言,clone()方法满足: (1)对任何的对象x,都有x.clone()!=x,即克隆 对象与原对象不是同一个对象。 (2)对任何的对象x,都有 x.clone().getClass()==x.getClass(),即克隆对 象与原对象的类型一样。 (3)如果对象x的equals()方法定义恰当,那么 x.clone().equals(x)应该成立。 原型模式 原型模式实例与解析 实例一:邮件复制(浅克隆) •由于邮件对象包含的内容较多(如发送者、接收者、 标题、内容、日期、附件等),某系统中现需要提供 一个邮件复制功能,对于已经创建好的邮件对象,可 以通过复制的方式创建一个新的邮件对象,如果需要 改变某部分内