原型模式(Prototype Pattern) 以PHP為例

 原型模式(Prototype Pattern)是一種創建型設計模式,它通過複製現有物件來生成新物件,而不需要使用者知道具體的創建邏輯。這種模式通常用於當創建物件的成本很高昂或複雜時,並且希望通過複製現有物件來獲得新物件。


下面是一個使用 PHP 實現原型模式的重構案例:

abstract class Prototype {

    protected $name;


    public function __construct($name) {

        $this->name = $name;

    }


    abstract public function clone(): Prototype;


    public function getName() {

        return $this->name;

    }

}


class ConcretePrototype extends Prototype {

    public function clone(): Prototype {

        return new ConcretePrototype($this->getName());

    }

}


// 使用範例

$prototype = new ConcretePrototype('Prototype');

$clone = $prototype->clone();


echo $prototype->getName();  // Output: Prototype

echo $clone->getName();  // Output: Prototype



在這個例子中,我們首先定義了一個抽象類別 `Prototype`,它包含一個抽象方法 `clone` 和一個共享的屬性 `name`。 `clone` 方法用於生成該物件的克隆,子類別必須實現這個方法。 `getName` 方法用於獲取物件的名稱。


然後,我們創建了具體的原型類別 `ConcretePrototype`,它繼承了 `Prototype` 並實現了 `clone` 方法。在 `clone` 方法中,我們創建了一個新的 `ConcretePrototype` 物件並將原始物件的名稱傳遞給它。


在使用範例中,我們創建了一個原型物件 `prototype`,然後通過調用 `clone` 方法來生成它的克隆 `clone`。最後,我們通過 `getName` 方法檢查原型和克隆的名稱,確認它們是一致的。


使用原型模式,我們可以通過複製現有的物件來生成新物件,而不需要使用者知道創建的具體細節。這在某些情況下可以提高效能和效率,並且更容易擴展和修改原型物件的屬性和行為。

留言

這個網誌中的熱門文章

bcb C++ Builder無法讀取JPG

tesseract is not installed or it's not in your path

tensorflow gpu版本 安裝教學 window 10 python 3.6