定義:用原型實例指定建立對象的種類,並經過拷貝這些原型建立新的對象。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接口。因此實現深拷貝並非特別困難。