【設計模式(四)】建立型模式--原型模式

hudad發表於2024-07-05

建立型模式的主要關注點是“怎樣建立物件?”,它的主要特點是“將物件的建立與使用分離”。這樣可以降低系統的耦合度,使用者不需要關注物件的建立細節。

概述:用一個已經建立的例項作為原型,透過複製該原型物件來建立一個和原型物件相同的新物件。

原型模式包含如下角色:

  • 抽象原型類:規定了具體原型物件必須實現的的 **clone() **方法。
  • 具體原型類:實現抽象原型類的 clone() 方法,它是可被複制的物件。
  • 訪問類:使用具體原型類中的 clone() 方法來複制新的物件。

原型模式的克隆分為淺克隆和深克隆。

淺克隆:建立一個新物件,新物件的屬性和原來物件完全相同,對於非基本型別屬性,仍指向原有屬性所指向的物件的記憶體地址。

深克隆:建立一個新物件,屬性中引用的其他物件也會被克隆,不再指向原有物件地址。

Java中的Object類中提供了 clone() 方法來實現淺克隆。 Cloneable 介面是上面的類圖中的抽象原型類,而實現了Cloneable介面的實現類就是具體的原型類。程式碼如下:

Realizetype(具體的原型類):

public class Realizetype implements Cloneable {

    public Realizetype() {
        System.out.println("具體的原型物件建立完成!");
    }

    @Override
    protected Realizetype clone() throws CloneNotSupportedException {
        System.out.println("具體原型複製成功!");
        return (Realizetype) super.clone();
    }
}

PrototypeTest(測試訪問類):

public class PrototypeTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        Realizetype r1 = new Realizetype();
        Realizetype r2 = r1.clone();//不是透過建構函式複製的

        System.out.println("物件r1和r2是同一個物件?" + (r1 == r2));//true
    }
}

注意:clone()是淺克隆,要實現深克隆可以使用序列化和反序列化來建立物件

相關文章