最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
PHP設(shè)計模式之簡單工廠和工廠模式的示例分析-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“PHP設(shè)計模式之簡單工廠和工廠模式的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“PHP設(shè)計模式之簡單工廠和工廠模式的示例分析”這篇文章吧。

云和ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

工廠模式是創(chuàng)建型模式的一種,分為簡單工廠模式,工廠模式,抽象工廠模式,簡單工廠可以稱之為工廠模式的一個特例

先用一段簡單的代碼說明一下,現(xiàn)在假設(shè)我們是顧客,需要蘋果味飲料和香蕉味飲料

getDrinkName();
echo "
"; $banana = new BananaDrink(); $banana->getDrinkName(); echo "
"; //顧客2 $apple1 = new AppleDrink(); $apple1->getDrinkName(); echo "
"; $banana1 = new BananaDrink(); $banana1->getDrinkName();

運(yùn)行結(jié)果:

蘋果飲料
香蕉飲料
蘋果飲料
香蕉飲料

這是最基本的寫法,顧客和飲料是強(qiáng)耦合關(guān)系,也就是咱們平常說的硬編碼

有一天,老板覺得AppleDrink這個名字在國內(nèi)不好賣,想要改成Xingmu(醒目)這種接中國地氣的名字(麥當(dāng)勞改成金拱門)

你會發(fā)現(xiàn),需要去代碼中找到每一處NEW的地方,全部改成new Xingmu()

如果它還有其他的初始化步驟,就更是噩夢,很可能會引起一些不必要的麻煩

下面咱們用簡單工廠模式,更改一下這個文件

makeDrink('apple');
$apple->getDrinkName();
echo "
"; $banana = $factory->makeDrink('banana'); $banana->getDrinkName(); echo "
"; $apple1 = $factory->makeDrink('apple'); $apple1->getDrinkName(); echo "
"; $banana1 = $factory->makeDrink('banana'); $banana1->getDrinkName();

運(yùn)行結(jié)果:

蘋果飲料
香蕉飲料
蘋果飲料
香蕉飲料

現(xiàn)在我們發(fā)現(xiàn),假如說老板想改名字,我只需要把FruitFactory里的new AppleDrink改為new Xingmu()即可,其他地方都不需要改動,也不用翻代碼找哪些地方用new了,實現(xiàn)了顧客和飲料之間的解耦,也符合面向?qū)ο蟮脑O(shè)計思想,我只是想要一瓶飲料,我并不需要了解這個飲料是怎么制造出來的

這就是簡單工廠模式,用戶在使用時可以直接根據(jù)工廠類去創(chuàng)建所需的實例,而無需了解這些對象是如何創(chuàng)建以及如何組織的,外界與具體類隔離開來,耦合性低,有利于整個軟件體系結(jié)構(gòu)的優(yōu)化,適用于工廠類負(fù)責(zé)創(chuàng)建的對象比較少,客戶只知道傳入了工廠類的參數(shù),對于如何創(chuàng)建對象(邏輯)不關(guān)心,簡單工廠模式又叫靜態(tài)工廠模式 可以把工廠類的方法寫成靜態(tài)方法 在不需要實例化工廠的前提下 直接調(diào)用靜態(tài)方法 返回所需實例

好的,那么接下來,問題又來了,公司準(zhǔn)備多元化產(chǎn)品,增加桔子味飲料,那么我們需要怎么做呢,首先要增加桔子味飲料類,然后需要在工廠里增加判斷,當(dāng)水果標(biāo)識是orange的時候,返回桔子味飲料

class OrangeDrink{
  function getDrinkName()
  {
    echo '桔子味飲料';
  }
}
class FruitFactory{
  function makeDrink($fruit){
    if ($fruit == 'apple'){
      return new AppleDrink();
    }elseif ($fruit == 'banana'){
      return new BananaDrink();
    }elseif ($fruit == 'orange'){
      return new OrangeDrink();
    }
  }
}

然后當(dāng)以后每次需要增加新的產(chǎn)品時,我們都需要更改工廠文件,當(dāng)對象生成復(fù)雜的時候,這個工廠文件會越來越大,更改或許會引起一些意想不到的問題

面向?qū)ο蟮脑O(shè)計原則,對擴(kuò)展開放,對更改關(guān)閉,那么有沒有辦法,在不更改原有代碼的基礎(chǔ)上,增加產(chǎn)品呢

答案是有的,咱們再改寫一下這個方法

makeDrink();
$apple->getDrinkName();
echo "
"; $bananaFactory = new BananaFactory(); $banana = $bananaFactory->makeDrink(); $banana->getDrinkName();

運(yùn)行結(jié)果:

蘋果味飲料
香蕉味飲料

現(xiàn)在當(dāng)再次需要增加桔子味飲料時,只需要增加桔子味飲料產(chǎn)品和桔子味飲料工廠即可,不需要改動原來的代碼

class OrangeDrink implements Drink{
  function getDrinkName()
  {
    echo '桔子味飲料';
  }
}
class OrangeFactory implements FruitFactory{
  function makeDrink()
  {
    return new OrangeDrink();
  }
}

這就是工廠模式,它是簡單工廠模式的衍生,解決了許多簡單工廠模式的問題。首先完全實現(xiàn)開閉原則,實現(xiàn)了對擴(kuò)展開放,對更改關(guān)閉。其次實現(xiàn)更復(fù)雜的層次結(jié)構(gòu),可以應(yīng)用于產(chǎn)品結(jié)果復(fù)雜的場合。工廠方法模式是對簡單工廠模式進(jìn)行了抽象。有一個抽象的Factory類(可以是抽象類和接口),這個類將不在負(fù)責(zé)具體的產(chǎn)品生產(chǎn),而是只制定一些規(guī)范,具體的生產(chǎn)工作由其子類去完成。在這個模式中,工廠類和產(chǎn)品類往往可以依次對應(yīng)。即一個抽象工廠對應(yīng)一個抽象產(chǎn)品,一個具體工廠對應(yīng)一個具體產(chǎn)品,這個具體的工廠就負(fù)責(zé)生產(chǎn)對應(yīng)的產(chǎn)品。

以上是“PHP設(shè)計模式之簡單工廠和工廠模式的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁題目:PHP設(shè)計模式之簡單工廠和工廠模式的示例分析-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://fisionsoft.com.cn/article/ccphcs.html