场景分析(如图)
定义及本质定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
本质:克隆生成对象。
主要功能:
1)通过克隆来创建新的对象实例;
2)为克隆出来的新的对象实例复制原型实例属性的值;
与new的区别:
1)new 一个对象的实例,属性值一般为默认值,或空值;
2)克隆的实例,属性值就是原型对象实例的属性的值;
结构示意图:
Prototype:定义克隆自身的接口,约束要克隆自身的类。
ConcretePrototype:克隆自身接口的实现类,真正实现克隆的功能。
Client:获取原型实例对象;获取克隆自身来创建的新实例对象。
浅度克隆与深度克隆
浅度克隆:只克隆按值传递的数据(基本类型、String数据),不克隆引用类型的数据。
深度克隆:既克隆按值传递的数据,又要克隆引用类型的数据。有两种方式可实现:一种是通过new,每个属性赋值;另一种通过实现Cloneable接口实现。
UML类图
调用时序图
优缺点
(1)优点
对客户端隐藏具体的实现类型
运行时动态改变具体的实现类型,克隆一个原型就等于实例化一个类。
(2)缺点
每个原型的子类必须实现clone操作,引用类型处理较麻烦。