極簡設計模式-原型模式

long2ge發表於2021-11-11

原型模式 - Prototype Pattern

定義

用原型例項來確定要建立物件的型別,並透過複製原型來建立新的物件。

結構中包含的角色

  1. Prototype(抽象原型角色):宣告一個克隆自身的介面
  2. Concrete Prototype(具體原型角色):實現一個克隆自身的操作

最小可表達程式碼

// 定義複製介面
interface Cloneable
{
    public function copy();
    public function deepCopy();
}

// 具體實現
class ConcreteCloneable
{
    // 淺複製
    public function copy()
    {
        return clone $this;
    }

    // 深複製
    public function deepCopy()
    {
        return unserialize(serialize($this));
    }
}

一句話概括設計模式

克隆物件。

設計的原則和思想

克隆物件。

優點

  1. 當建立新的物件例項較為複雜時,使用原型模式可以簡化物件的建立過程。
  2. 逃避建構函式的約束。
  3. 深克隆儲存物件的狀態,可以實現狀態模式。

缺點

  1. 每一個類都需要一個克隆方法,程式碼沒法重用。
  2. 克隆包含迴圈引用的複雜物件會非常麻煩。

何時使用

  1. 建立一個物件的成本較高。
  2. 一個物件,多個呼叫者的場景。

實際應用場景

  1. Laravel 裡面的Builder複製。
  2. JAVA 中的 Object clone() 方法。
  3. 電腦上的複製(Ctrl + C)和貼上(Ctrl + V)操作。

淺複製與深複製

淺複製 : 被複製物件的所有變數都含有與原物件相同的值,而且對其他物件的引用仍然是指向原來的物件。
深複製 : 完整複製一個物件。深複製把要複製的物件所引用的物件也複製了一次。可以使用序列化來做深複製。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Long2Ge

相關文章