PHP設計模式:原型模式

前言

原型模式用于創(chuàng)建當前對象的克隆。當直接創(chuàng)建對象的代價比較大時弹沽,則采用這種模式追迟。例如溶其,一個對象需要在一個高代價的數(shù)據(jù)庫操作之后被創(chuàng)建。我們可以緩存該對象敦间,在下一個請求時返回它的克隆瓶逃,在需要的時候更新數(shù)據(jù)庫束铭,以此來減少數(shù)據(jù)庫調(diào)用。

代碼

//定義一個巨大的文本類(假設創(chuàng)建它的時候內(nèi)存消耗很大QWQ)
class Company
{
    private $company;

    public function setName($name)
    {
        $this->company = $name;
    }

    public function getName()
    {
        return $this->company;
    }
}

//這個類主要用來做邏輯
class Archives
{
    private $name;
    private $sex;
    private $age;
    private $work;
    private $company;

    //構造函數(shù)加載一次那個巨大的類 (重點)
    function __construct()
    {
        $this->company = new Company();
    }

    public function setInfo($name, $sex, $age)
    {
        $this->name = $name;
        $this->sex = $sex;
        $this->age = $age;
    }

    public function setWork($company, $work)
    {
        $this->work = $work;
        $this->company->setName($company);
    }

    public function show()
    {
        echo $this->name . " " . $this->sex . " " . $this->age . "\n";
        echo $this->work . " " . $this->company->getName() . "\n";
    }

    // 對引用執(zhí)行深復制(重點)
    function __clone()
    {
        $this->company = clone $this->company;
    }
}

$resume = new Archives("蛇精病俱樂部");
$resume->setInfo("張小帥", "男", 24);
$resume->setWork("WEB開發(fā)部", "PHP工程師");

$resume2 = clone $resume;
$resume2->setInfo("王明明", "男", 40);
$resume2->setWork("WEB開發(fā)部", "產(chǎn)品經(jīng)理");

$resume3 = clone $resume2;
$resume3->setInfo("孫苦苦", "女", 18);
$resume3->setWork("WEB開發(fā)部", "程序員鼓勵師");

$resume->show();
$resume2->show();
$resume3->show();

輸出

image.png

總結

說白了原型模式就是克隆的一種玩法厢绝,不需要想象的太過于復雜契沫。簡單來說他就是克隆昔汉!

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末懈万,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挤庇,更是在濱河造成了極大的恐慌钞速,老刑警劉巖贷掖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫡秕,死亡現(xiàn)場離奇詭異,居然都是意外死亡苹威,警方通過查閱死者的電腦和手機昆咽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牙甫,“玉大人掷酗,你說我怎么就攤上這事】卟福” “怎么了泻轰?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長且轨。 經(jīng)常有香客問我浮声,道長,這世上最難降的妖魔是什么旋奢? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任泳挥,我火速辦了婚禮,結果婚禮上至朗,老公的妹妹穿的比我還像新娘屉符。我一直安慰自己,他們只是感情好锹引,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布矗钟。 她就那樣靜靜地躺著,像睡著了一般嫌变。 火紅的嫁衣襯著肌膚如雪吨艇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天初澎,我揣著相機與錄音秸应,去河邊找鬼虑凛。 笑死,一個胖子當著我的面吹牛软啼,可吹牛的內(nèi)容都是我干的桑谍。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼祸挪,長吁一口氣:“原來是場噩夢啊……” “哼锣披!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贿条,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤雹仿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后整以,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胧辽,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年公黑,在試婚紗的時候發(fā)現(xiàn)自己被綠了邑商。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡凡蚜,死狀恐怖人断,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情朝蜘,我是刑警寧澤恶迈,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站谱醇,受9級特大地震影響暇仲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜枣抱,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一熔吗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佳晶,春花似錦桅狠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至菇篡,卻和暖如春漩符,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驱还。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工嗜暴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凸克,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓闷沥,卻偏偏與公主長得像萎战,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子舆逃,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 適用性 原型設計模式創(chuàng)建對象的方式是復制和克隆初始對象或原型蚂维,這種方式比創(chuàng)建新實例更為有效。 UML MyOjec...
    木有sky閱讀 356評論 0 1
  • 原型模式(Prototype Pattern):與工廠模式類似路狮,都是用來創(chuàng)建對象的虫啥。利用克隆來生成一個大對象,減少...
    程序員祝融閱讀 579評論 0 1
  • 用原型實例指定創(chuàng)建對象的種類奄妨,并且通過拷貝這些原型創(chuàng)建新的對象涂籽。Prototype模式允許一個對象再創(chuàng)建另外一個可...
    中v中閱讀 325評論 0 0
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時,會觸發(fā)此異常展蒂。 O...
    我想起個好名字閱讀 5,343評論 0 9
  • 1 場景問題# 1.1 訂單處理系統(tǒng)## 考慮這樣一個實際應用:訂單處理系統(tǒng)又活。 現(xiàn)在有一個訂單處理的系統(tǒng),里面有個...
    七寸知架構閱讀 4,450評論 3 63