PHP 設(shè)計(jì)模式---原型模式

原型模式(Prototype Pattern):與工廠模式類(lèi)似,都是用來(lái)創(chuàng)建對(duì)象的。利用克隆來(lái)生成一個(gè)大對(duì)象,減少創(chuàng)建時(shí)的初始化等操作占用開(kāi)銷(xiāo)

為什么需要原型模式

1,有些時(shí)候,我們需要?jiǎng)?chuàng)建多個(gè)類(lèi)似的大對(duì)象。如果直接通過(guò)new對(duì)象,開(kāi)銷(xiāo)很大,而且new完還得進(jìn)行重復(fù)的初始化工作。可能把初始化工作封裝起來(lái)的,但是對(duì)于系統(tǒng)來(lái)說(shuō),你封不封裝,初始化工作還是要執(zhí)行。
2,原型模式則不同,原型模式是先創(chuàng)建好一個(gè)原型對(duì)象,然后通過(guò)clone這個(gè)原型對(duì)象來(lái)創(chuàng)建新的對(duì)象,這樣就免去了重復(fù)的初始化工作,系統(tǒng)僅需內(nèi)存拷貝即可。

<?php
/**
* 原型模式
*
* @author webff
*/
/**

//聲明一個(gè)克隆自身的接口
interface Prototype {
    function copy(); 
}   

//產(chǎn)品要實(shí)現(xiàn)克隆自身的操作
class Student implements Prototype {
    //簡(jiǎn)單起見(jiàn),這里沒(méi)有使用get set
    public $school;
    public $major;
    public $name;

    public function __construct($school, $major, $name) {
        $this->school = $school;
        $this->major = $major;
        $this->name = $name;
    }

    public function printInfo() {
        printf("%s,%s,%sn", $this->school, $this->major, $this->name);
     }

    public function copy() {
        return clone $this;
    }
}

$stu1 = new Student('清華大學(xué)', '計(jì)算機(jī)', '張三');
$stu1->printInfo();

$stu2 = $stu1->copy();
$stu2->name = '李四';
$stu2->printInfo();

?>

這里可以看到,如果類(lèi)的成員變量非常多,如果由外部創(chuàng)建多個(gè)新對(duì)象再一個(gè)個(gè)賦值,則效率不高代碼冗余也容易出錯(cuò),通過(guò)原型拷貝復(fù)制自身再進(jìn)行微小修改就是另一個(gè)新對(duì)象了。

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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