原型模式

定義

用原型實例指定創建對象的種類,並通過拷貝這些原型創建新的對象

結構與說明

Prototype : 申明一個克隆自身的接口
ConcretePrototype : 實現Prototype接口的類
Client : 使用原型的客戶端

實現

在java的世界中,有一個Cloneable的接口來實現原型,代碼如下 :

public class ConcretePrototype implements Cloneable{
    private static Logger log = LoggerFactory.getLogger(ConcretePrototype.class);   
    //肯定用到的代碼
    public Object/父接口 clone(){
        Object/父接口 obj = null;
        try{
            //這個是淺拷貝
            obj = super.clone();
            //內部數組、引用對象是不拷貝的,需要單獨進行深拷貝
            obj.arrayList = (ArrayList<Stirng>)this.arrayList.clone();
        }catch(CloneNotSupportedException e){
                log.error("....");
                ....//其他的一些處理
        }
        return obj;
    }
}

關於深拷貝和淺拷貝 :

Object提供的clone只是拷貝對象,其對象內部的數組、引用對象等都不拷貝,還是指向原生對象的內部元素地址,這種拷貝叫做淺拷貝,此時,兩個對象共享了一個私有變量,當然很不安全

深拷貝 :

在使用深拷貝的時候,對象內部就必要使用final字段了,會報錯,兩個是冤家。

談談原型的優點 :

性能優良 : java的原型是內存二進制流的拷貝,比new一個對象的性能好得多
避免了構造函數的約束 : 內存中的拷貝,構造函數是不執行的。

使用場景

一個對象,多個修改,向copy-on-write機制
new產生對象需要很長的數據準備或者訪問權限

No Final is final
By   Xu.j.h
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章