版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第7章章 原型原型模式模式(P77)v原型模式概述原型模式概述v原型模式的结构与实现原型模式的结构与实现v原型模式的应用实例原型模式的应用实例v原型管理器原型管理器v原型模式的优缺点与适用环境原型模式的优缺点与适用环境原型模式概述原型模式概述v孙悟空孙悟空“拔毛变小猴拔毛变小猴”原型模式概述原型模式概述v分析分析孙悟空:根据自己的形状孙悟空:根据自己的形状复制(克隆)复制(克隆)出多个身外身出多个身外身软件开发:通过复制一个软件开发:通过复制一个原型对象原型对象得得到多个与原型对象一模一样的新到多个与原型对象一模一样的新对象对象原型模式多用于创建复杂的或者耗时原型模式多用于创建复杂的或者耗时
2、的实例的实例, 因为这种情况下因为这种情况下,复制一个已复制一个已经存在的实例可以使程序运行更高效经存在的实例可以使程序运行更高效,或者创建值相等或者创建值相等,只是命名不一样的同只是命名不一样的同类数据类数据.原型模式的定义原型模式的定义v原型模式:使用原型实例指定待创建对原型模式:使用原型实例指定待创建对象的类型,并且象的类型,并且通过复制这个原型来创通过复制这个原型来创建新的对象建新的对象。原型模式的定义原型模式的定义v工作原理:工作原理:将一个原型对象传给要发动创建的将一个原型对象传给要发动创建的对象(即客户端对象),这个要发动创建的对对象(即客户端对象),这个要发动创建的对象象通过请
3、求原型对象复制自己来实现创建过程通过请求原型对象复制自己来实现创建过程v创建新对象(也称为克隆对象)的创建新对象(也称为克隆对象)的工厂工厂就是就是原原型类型类自身,自身,工厂方法工厂方法由负责复制原型对象的由负责复制原型对象的克克隆方法隆方法来实现来实现v通过克隆方法所创建的对象是通过克隆方法所创建的对象是全新的对象全新的对象,它,它们在内存中拥有新的地址,每一个克隆对象都们在内存中拥有新的地址,每一个克隆对象都是是独立独立的的v通过不同的方式对克隆对象进行修改以后,通过不同的方式对克隆对象进行修改以后,可可以得到一系列相似但不完全相同的对象以得到一系列相似但不完全相同的对象原型模式的结构原
4、型模式的结构v原型模式包含以下原型模式包含以下3个角色:个角色:Prototype(抽象原型类)(抽象原型类)ConcretePrototype(具体原型类)(具体原型类)Client(客户类)(客户类)模式分析模式分析v在原型模式结构中定义了一个抽象原型类,所在原型模式结构中定义了一个抽象原型类,所有的有的Java类都继承自类都继承自java.lang.Object,而,而Object类提供一个类提供一个clone()方法方法,可以将一个,可以将一个Java对象复制一份。因此在对象复制一份。因此在Java中可以直接中可以直接使用使用Object提供的提供的clone()方法来实现对象的方法来
5、实现对象的克隆,克隆,Java语言中的原型模式实现很简单。语言中的原型模式实现很简单。v能够实现克隆的能够实现克隆的Java类必须类必须实现一个标识接口实现一个标识接口Cloneable,表示这个,表示这个Java类支持复制。如果类支持复制。如果一个类没有实现这个接口但是调用了一个类没有实现这个接口但是调用了clone()方法,方法,Java编译器将抛出一个编译器将抛出一个CloneNotSupportedException异常。异常。模式分析模式分析public class PrototypeDemo implements Cloneable public Object clone()Obj
6、ect object = null;try object = super.clone(); catch (CloneNotSupportedException exception) System.err.println(Not support cloneable);return object; 模式分析模式分析v通常情况下,一个类包含一些成员通常情况下,一个类包含一些成员对象,在使用原型模式克隆对象时对象,在使用原型模式克隆对象时,根据其成员对象是否也克隆,原根据其成员对象是否也克隆,原型模式可以分为两种形式:深克隆型模式可以分为两种形式:深克隆和浅克隆和浅克隆。浅克隆与深克隆浅克隆与深克隆v
7、浅浅克隆克隆: 对值类型对值类型(char,byte,int,short,long,float,double,boolean)的成员变量的成员变量进行值的复制进行值的复制,对引用类型的成员变对引用类型的成员变量只复制引用量只复制引用,不复制引用的对象不复制引用的对象.v深深克隆克隆: 对值类型的成员变量进行对值类型的成员变量进行值的复制值的复制,对引用类型的成员变量也对引用类型的成员变量也进行引用对象的复制进行引用对象的复制.复制对象复制对象 or 复制引用复制引用Person p = new Person(23, zhang); Person p1 = p; System.out.print
8、ln(p); System.out.println(p1); Person15db9742Person15db9742复制对象复制对象 or 复制引用复制引用Person p = new Person(23, zhang); Person p1 = (Person) p.clone(); System.out.println(p); System.out.println(p1);Person15db9742Person6d06d69c浅克隆与深浅克隆与深克隆克隆模式分析模式分析vJava语言提供的语言提供的clone()方法将对象复方法将对象复制了一份并返回给调用者。一般而言,制了一份并返回给
9、调用者。一般而言,clone()方法满足:方法满足: (1) 对任何的对象对任何的对象x,都有,都有x.clone() !=x,即克隆对象与原对象不是同一个对象。即克隆对象与原对象不是同一个对象。(2) 对任何的对象对任何的对象x,都有,都有x.clone().getClass()=x.getClass(),即克隆对象与原对象的类型一样。即克隆对象与原对象的类型一样。(3) 如果对象如果对象x的的equals()方法定义恰当,方法定义恰当,那么那么x.clone().equals(x)应该成立。应该成立。实例一:邮件复制(浅克隆)实例一:邮件复制(浅克隆)v由于邮件对象包含的内容较多(如发送由于邮件对象包含的内容较多(如发送者、接收者、标题、内容、日期、附件者、接收者、标题、内容、日期、附件等),某系统中现需要提供一个邮件复等),某系统中现需要提供一个邮件复制功能,对于已经创建好的邮件对象,制功能,对于已经创建好的邮件对象,可以通过复制的方式创建一个新的邮件可以通过复制的方式创建一个新的邮件对象,如果需要改变某部分内容,无须对象,如果需要改变某部分内容,无须修改原始的邮件对象,只需要修改复制修改原始的邮件对象,只需要修改复
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国银行保险行业市场前景预测及投资战略研究报告
- 2025年行政事业单位物业设备采购与安装合同2篇
- 2025年浙江新北园区开发有限公司招聘笔试参考题库含答案解析
- 2025年福建东南设计集团有限公司招聘笔试参考题库含答案解析
- 二零二五年度二零二五健康养生产品销售代理合同4篇
- 2025年山西晋沃投资发展有限公司招聘笔试参考题库含答案解析
- 2025年广西合山市储备粮管理公司招聘笔试参考题库含答案解析
- 2025年合肥肥西县乡村振兴投资集团有限公司子公司招聘笔试参考题库附带答案详解
- 《药品销售专业人士高级培训课件》
- 二零二五年度门窗玻璃深加工合作协议2篇
- 高考对联题(对联知识、高考真题及答案、对应练习题)
- 新版《铁道概论》考试复习试题库(含答案)
- 【律师承办案件费用清单】(计时收费)模板
- 高中物理竞赛真题分类汇编 4 光学 (学生版+解析版50题)
- Unit1FestivalsandCelebrations词汇清单高中英语人教版
- 西方经济学-高鸿业-笔记
- 2024年上海市中考语文试题卷(含答案)
- 幼儿园美术教育研究策略国内外
- 生猪养殖生产过程信息化与数字化管理
- (完整)六年级数学上册寒假每天10道计算题5道应用题
- (2024年)版ISO9001质量管理体系培训教材
评论
0/150
提交评论