成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

warnerwu / 2138人閱讀

摘要:原型設(shè)計(jì)模式中的構(gòu)造函數(shù)使用創(chuàng)建新對(duì)象時(shí),并不會(huì)觸發(fā)類的構(gòu)造函數(shù)。事實(shí)上,使用構(gòu)造函數(shù)并不一定是一個(gè)好的設(shè)計(jì),由于構(gòu)造函數(shù)內(nèi)的邏輯無(wú)法被外部控制,當(dāng)需要修改一個(gè)類構(gòu)造時(shí)的邏輯時(shí),除了修改類的構(gòu)造函數(shù)實(shí)現(xiàn)以外,別無(wú)他法,這破壞了類的封裝。

原文地址:PHP設(shè)計(jì)模式(九):原型設(shè)計(jì)模式

Introduction

在PHP設(shè)計(jì)模式(八):工廠模式中我們介紹了創(chuàng)建設(shè)計(jì)模式(Creation patterns)中的工廠模式,下面我們將介紹另一種原型設(shè)計(jì)模式(Prototype Method)。
在PHP中,原型設(shè)計(jì)模式依靠cloning復(fù)制對(duì)象來(lái)實(shí)現(xiàn)。通過(guò)cloning構(gòu)造的對(duì)象,將大量節(jié)省新對(duì)象的構(gòu)造時(shí)間。

何時(shí)使用原型設(shè)計(jì)模式?

簡(jiǎn)單來(lái)說(shuō),當(dāng)你希望根據(jù)已有的對(duì)象來(lái)創(chuàng)建新對(duì)象時(shí)。
為什么會(huì)有這種需求?想象一下,你在做細(xì)胞分裂的項(xiàng)目,每一個(gè)細(xì)胞都是一個(gè)對(duì)象,現(xiàn)在你有一個(gè)細(xì)胞類,每一個(gè)新的細(xì)胞都是由這個(gè)類生成的,不同的細(xì)胞只是內(nèi)部的狀態(tài)參數(shù)不同。
當(dāng)分裂到第N代的時(shí)候,已經(jīng)和初代大不一樣了,你是愿意使用第N代的副本修改一下呢?還是愿意從初代慢慢推演?

Example

PHP提供了內(nèi)建的__clone()函數(shù)以及clone關(guān)鍵字,來(lái)實(shí)現(xiàn)對(duì)象的復(fù)制。下面給出一個(gè)例子:

id = 1;
    $this->dna = "ATCG";
  }
  public function displayDNA() {
    echo $this->dna . "
";
  }
  function __clone() {
    $this->id = $this->id + 1;
    if ($this->id % 3 == 0) {
      $this->dna = $this->dna . "AT";
    }
    if ($this->id % 5 == 0) {
      $this->dna = $this->dna . "CG";
    }
  }
}

$whaleCell = new WhaleCell();
$whaleCell->displayDNA();
$whaleCell2 = clone $whaleCell;
$whaleCell2->displayDNA();
$whaleCell3 = clone $whaleCell2;
$whaleCell3->displayDNA();
$whaleCell4 = clone $whaleCell3;
$whaleCell4->displayDNA();
$whaleCell5 = clone $whaleCell4;
$whaleCell5->displayDNA();
?>

運(yùn)行一下:

ATCG
ATCG
ATCGAT
ATCGAT
ATCGATCG

程序簡(jiǎn)單的模擬了DNA的遺傳突變,每遺傳三代,DNA增加AT,每遺傳五代,DNA增加CG。

原型設(shè)計(jì)模式中的構(gòu)造函數(shù)

使用clone創(chuàng)建新對(duì)象時(shí),并不會(huì)觸發(fā)類的構(gòu)造函數(shù)。這也是在使用原型設(shè)計(jì)模式中需要注意的一點(diǎn)。clone的底層實(shí)現(xiàn)并不是調(diào)用類的構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)類,而是直接拷貝一個(gè)類的地址空間,生成另一個(gè)類。這種直接拷貝也帶來(lái)了高效。
事實(shí)上,使用構(gòu)造函數(shù)并不一定是一個(gè)好的設(shè)計(jì),由于構(gòu)造函數(shù)內(nèi)的邏輯無(wú)法被外部控制,當(dāng)需要修改一個(gè)類構(gòu)造時(shí)的邏輯時(shí),除了修改類的構(gòu)造函數(shù)實(shí)現(xiàn)以外,別無(wú)他法,這破壞了類的封裝。

Summary

原型設(shè)計(jì)模式帶來(lái)了另一種創(chuàng)建對(duì)象的思路,合理的使用cloning構(gòu)造對(duì)象,將提高程序創(chuàng)建新對(duì)象時(shí)的效率。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21674.html

相關(guān)文章

  • 月光寶盒之網(wǎng)站資源收錄

    摘要:開源的論壇網(wǎng)站開源的論壇源代碼接口管理接口環(huán)境下環(huán)境一鍵安裝軟件二前端資源中國(guó)淘寶鏡像在國(guó)內(nèi),由于墻的原因,安裝包速度很慢,所以,這里建議使用淘寶提供的鏡像安裝前端資源。 為者常成,行者常至。 一、PHP資料 1、V2EX way to explore 分享和探索的地方2、Laravel China 中國(guó)最大的 Laravel 和 PHP 開發(fā)者社區(qū)3、Composer使用方法4、Pa...

    learning 評(píng)論0 收藏0
  • 月光寶盒之網(wǎng)站資源收錄

    摘要:開源的論壇網(wǎng)站開源的論壇源代碼接口管理接口環(huán)境下環(huán)境一鍵安裝軟件二前端資源中國(guó)淘寶鏡像在國(guó)內(nèi),由于墻的原因,安裝包速度很慢,所以,這里建議使用淘寶提供的鏡像安裝前端資源。 為者常成,行者常至。 一、PHP資料 1、V2EX way to explore 分享和探索的地方2、Laravel China 中國(guó)最大的 Laravel 和 PHP 開發(fā)者社區(qū)3、Composer使用方法4、Pa...

    2bdenny 評(píng)論0 收藏0
  • PHP基礎(chǔ)

    摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計(jì)模式五適配器模式適配器模式將某個(gè)對(duì)象的接生成器和協(xié)程的實(shí)現(xiàn)在這篇文章中,作者針對(duì)那些比較難以理解的概念,以一個(gè)更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細(xì)源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場(chǎng)景 (PHP 實(shí)戰(zhàn)) 這篇文章主要介紹利用 R...

    HtmlCssJs 評(píng)論0 收藏0
  • 前端基礎(chǔ)進(jìn)階():詳解面向?qū)ο蟆?gòu)造函數(shù)、原型原型

    摘要:我們通過(guò)一個(gè)簡(jiǎn)單的例子與圖示,來(lái)了解構(gòu)造函數(shù),實(shí)例與原型三者之間的關(guān)系。而原型對(duì)象的指向構(gòu)造函數(shù)。于是根據(jù)構(gòu)造函數(shù)與原型的特性,我們就可以將在構(gòu)造函數(shù)中,通過(guò)聲明的屬性與方法稱為私有變量與方法,它們被當(dāng)前被某一個(gè)實(shí)例對(duì)象所獨(dú)有。 showImg(https://segmentfault.com/img/remote/1460000008593382); 如果要我總結(jié)一下學(xué)習(xí)前端以來(lái)我遇...

    Tony_Zby 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<