定义:用原型实例指定建立对象的种类,并经过拷贝这些原型建立新的对象。java
类型:建立类模式数组
类图:安全
原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类须要具有如下两个条件:性能
原型模式是一种比较简单的模式,也很是容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式不多单独出现。常常与其余模式混用,他的原型类Prototype也经常使用抽象类来替代。this
实现代码:.net
class Prototype implements Cloneable { prototype
public Prototype clone(){ 对象
Prototype prototype = null; 接口
try{ 内存
prototype = (Prototype)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return prototype;
}
}
class ConcretePrototype extends Prototype{
public void show(){
System.out.println("原型模式实现类");
}
}
public class Client {
public static void main(String[] args){
ConcretePrototype cp = new ConcretePrototype();
for(int i=0; i< 10; i++){
ConcretePrototype clonecp = (ConcretePrototype)cp.clone();
clonecp.show();
}
}
}
原型模式的优势及适用场景
使用原型模式建立对象比直接new一个对象在性能上要好的多,由于Object类的clone方法是一个本地方法,它直接操做内存中的二进制流,特别是复制大对象时,性能的差异很是明显。
使用原型模式的另外一个好处是简化对象的建立,使得建立对象就像咱们在编辑文档时的复制粘贴同样简单。
由于以上优势,因此在须要重复地建立类似对象时能够考虑使用原型模式。好比须要在一个循环体内建立对象,假如对象建立过程比较复杂或者循环次数不少的话,使用原型模式不但能够简化建立过程,并且可使系统的总体性能提升不少。
原型模式的注意事项
因为ArrayList不是基本类型,因此成员变量list,不会被拷贝,须要咱们本身实现深拷贝,幸运的是Java提供的大部分的容器类都实现了Cloneable接口。因此实现深拷贝并非特别困难。