我理解的原型模式

背景

原型模式也是一種建立模式,它主要經過複製一個對象來建立一個新的對象。 原型類須要知足兩個條件:java

  • 實現Cloneable接口,只有實現了這個接口的類才能被拷貝,不然會拋出CloneNotSupportedException異常。
  • 重寫Object類中的clone方法,由於Object類中的clone方法是protect,所以原型類須要重寫,將clone方法改成public

示例代碼

以下:ide

public class ProtoType implements Cloneable {
    public void show() {
        System.out.println("hahaha");
    }
    @Override
    protected ProtoType clone() {
        ProtoType protoType = null;
        try {
            protoType = (ProtoType)super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return protoType;
    }
}
複製代碼

客戶端調用spa

public class Main {
    public static void main(String[] args) {
        ProtoType protoType = new ProtoType();
        ProtoType clone = protoType.clone();
        clone.show();
    }
}
複製代碼

適用場景

protected native Object clone() throws CloneNotSupportedException;
複製代碼

Object類中的clone方法是一個native方法,直接操做內存中的二進制流,因此在構建複雜大對象的時候,會比new一個對象快。code

注意事項

  • 使用clone方法不會調用類的構造方法。
  • Object中的clone方法是淺拷貝,若是想要實現深拷貝,須要本身實現。 最簡單的深拷貝方式直接序列化,而後反序列化
相關文章
相關標籤/搜索