極簡(jiǎn)設(shè)計(jì)模式-原型模式

定義

用原型實(shí)例來確定要?jiǎng)?chuàng)建對(duì)象的類型,并通過復(fù)制原型來創(chuàng)建新的對(duì)象。

結(jié)構(gòu)中包含的角色

  1. Prototype(抽象原型角色):聲明一個(gè)克隆自身的接口
  2. Concrete Prototype(具體原型角色):實(shí)現(xiàn)一個(gè)克隆自身的操作

最小可表達(dá)代碼

// 定義拷貝接口
interface Cloneable
{
    public function copy();
    public function deepCopy();
}

// 具體實(shí)現(xiàn)
class ConcreteCloneable
{
    // 淺拷貝
    public function copy()
    {
        return clone $this;
    }
    
    // 深拷貝
    public function deepCopy()
    {
        return unserialize(serialize($this));
    }
}

一句話概括設(shè)計(jì)模式

克隆對(duì)象。

設(shè)計(jì)的原則和思想

克隆對(duì)象。

優(yōu)點(diǎn)

  1. 當(dāng)創(chuàng)建新的對(duì)象實(shí)例較為復(fù)雜時(shí),使用原型模式可以簡(jiǎn)化對(duì)象的創(chuàng)建過程。
  2. 逃避構(gòu)造函數(shù)的約束。
  3. 深克隆保存對(duì)象的狀態(tài),可以實(shí)現(xiàn)狀態(tài)模式。

缺點(diǎn)

  1. 每一個(gè)類都需要一個(gè)克隆方法,代碼沒法重用。
  2. 克隆包含循環(huán)引用的復(fù)雜對(duì)象會(huì)非常麻煩。

何時(shí)使用

  1. 創(chuàng)建一個(gè)對(duì)象的成本較高。
  2. 一個(gè)對(duì)象,多個(gè)調(diào)用者的場(chǎng)景。

實(shí)際應(yīng)用場(chǎng)景

  1. Laravel 里面的Builder復(fù)制。
  2. JAVA 中的 Object clone() 方法。
  3. 電腦上的復(fù)制(Ctrl + C)和粘貼(Ctrl + V)操作。

淺拷貝與深拷貝

淺拷貝 : 被拷貝對(duì)象的所有變量都含有與原對(duì)象相同的值,而且對(duì)其他對(duì)象的引用仍然是指向原來的對(duì)象。
深拷貝 : 完整復(fù)制一個(gè)對(duì)象。深拷貝把要拷貝的對(duì)象所引用的對(duì)象也拷貝了一次??梢允褂眯蛄谢瘉碜錾羁截悺?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容