設計模式GOF23——克隆模式

克隆模式(protopyte)是創建者模式的一種,是一種負責創建對象的模式。也叫原型模式

模式的應用場景

創建一個對象需要非常繁瑣的數據準備或者訪問權限,爲了節省時間,可以使用克隆模式。
克隆模式就是java的克隆技術,以某個對象爲原型,複製出新的對象。顯然,新的對象具備原有對象的的特點。
克隆模式的有點顯而易見:效率高(直接克隆,避免了重新執行構造過程的步奏)。
克隆類似於new,但是不同與new。New創建的對象屬性採用的是默認型。克隆出的對象屬性值和原型對象的完全相同。並且克隆出來的對象不會改變原有的對象,然後可以在給克隆出來的對象賦值。

模式的實現

Cloneable接口和clone方法
原型模式實現起來最困難的地方在於內存複製操作,所幸在Java中提供了clone()方法替我們做了絕大部分的事情。

public class Sheep implements Cloneable{//克隆羊多利
    private String name;
    private String age;
    @Override
    protected Object clone(){
        Object obj = null;
        try {
            obj = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return obj;
    }
}

這裏的重寫的clone()方法,就是克隆模式克隆所需要的方法。只需要對象名.clone()就可以成功克隆。然而,使用這個克隆方式,克隆的對象必須實現Cloneable接口。
需要注意的是用clone()方法克隆得到的對象的修改對克隆的原型沒有任何用處,原型的修改對克隆對象也沒有任何作用。簡而言之,克隆完成後兩者修改和對方沒有聯繫。

淺克隆於深克隆

淺克隆是原型對象和複製對象的內存地址一致,如果修改其中任何一個,另一個也會被修改。簡而言之,兩者是一體的,一樣的。
深克隆指的是原型對象和複製的對象內存地址不一致,只是克隆之後的值一致。修改任何一方的值都不會對他們產生影響。簡而言之,兩者只是值一樣,也就是通常我們所想要的克隆。

克隆模式的其他方法

克隆模式也可以通過序列化反序列化中的readObjsct()方法來完成克隆,也屬於深克隆。但是它所克隆的對象也必須要實現特定的接口,這個接口就是Serializable接口。

克隆模式的應用

克隆模式很少單獨使用,一般是和單例模式同時使用。例如在spring中的bean的創建就是通過單例模式創建第一個,克隆模式來創建之後所需要的來節省時間

創建者模式小結

創建者模式都是用在創建對象過程中的模式。
創建者模式包括單例模式,工廠模式,抽象工廠模式,建造者模式,原型模式5種,它們的作用分別是:
單例模式:保證只創建一個實例,並提供一個訪問實例對象的全局訪問點。
工廠模式:創建和引用分離。
抽象工廠模式:產品組的創建和引用分離。
建造者模式:複雜對象的創建。
原型模式:克隆對象。

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