一、定义
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。
二、例子
原型(实际上是implements了Cloneable接口,进而重写clone()方法):
package com.wuychn.prototype;
public class ProtoType implements Cloneable {
private String name;
@Override
public ProtoType clone() {
try {
return (ProtoType) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试代码:
package com.wuychn.prototype;
public class Test {
public static void main(String[] args) {
ProtoType pt1 = new ProtoType();
pt1.setName("protoType_1");
ProtoType pt2 = pt1.clone();
System.out.println(pt1 == pt2);
System.out.println(pt1.getClass() == pt2.getClass());
pt2.setName("protoType_2");
System.out.println(pt1.getName() + " " + pt2.getName());
}
}
克隆还分为浅克隆和深克隆,详情见我的另一篇博文http://blog.sina.com.cn/s/blog_8a3eec6f0102xm1w.html。
三、优缺点
优点:
如果创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提高效率。
可以使用深克隆保持对象的状态。
原型模式提供了简化的创建结构。
缺点:
在实现深克隆的时候可能需要比较复杂的代码。
需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事,必须修改其源代码,违背了“开闭原则”。
原文:https://blog.csdn.net/u013256816/article/details/50981322