亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP設計模式之簡單工廠和工廠模式實例分析

2024-05-05 00:07:56
字體:
來源:轉載
供稿:網友

本文實例講述了PHP設計模式之簡單工廠和工廠模式。分享給大家供大家參考,具體如下:

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

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

<?phpclass AppleDrink{  function getDrinkName()  {    echo '蘋果飲料';  }}class BananaDrink{  function getDrinkName()  {    echo '香蕉飲料';  }}//顧客1$apple = new AppleDrink();$apple->getDrinkName();echo "<br/>";$banana = new BananaDrink();$banana->getDrinkName();echo "<br/>";//顧客2$apple1 = new AppleDrink();$apple1->getDrinkName();echo "<br/>";$banana1 = new BananaDrink();$banana1->getDrinkName();

運行結果:

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

這是最基本的寫法,顧客和飲料是強耦合關系,也就是咱們平常說的硬編碼

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

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

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

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

<?phpclass AppleDrink{  function getDrinkName()  {    echo '蘋果飲料';  }}class BananaDrink{  function getDrinkName()  {    echo '香蕉飲料';  }}class FruitFactory{  function makeDrink($fruit){    if ($fruit == 'apple'){      return new AppleDrink();    }elseif ($fruit == 'banana'){      return new BananaDrink();    }  }}$factory = new FruitFactory();$apple = $factory->makeDrink('apple');$apple->getDrinkName();echo "<br/>";$banana = $factory->makeDrink('banana');$banana->getDrinkName();echo "<br/>";$apple1 = $factory->makeDrink('apple');$apple1->getDrinkName();echo "<br/>";$banana1 = $factory->makeDrink('banana');$banana1->getDrinkName();

運行結果:

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

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

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

好的,那么接下來,問題又來了,公司準備多元化產品,增加桔子味飲料,那么我們需要怎么做呢,首先要增加桔子味飲料類,然后需要在工廠里增加判斷,當水果標識是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();    }  }}

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

面向對象的設計原則,對擴展開放,對更改關閉,那么有沒有辦法,在不更改原有代碼的基礎上,增加產品呢

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

<?phpinterface Drink{  function getDrinkName();}class AppleDrink implements Drink{  function getDrinkName()  {    echo '蘋果味飲料';  }}class BananaDrink implements Drink{  function getDrinkName()  {    echo '香蕉味飲料';  }}interface FruitFactory{  function makeDrink();}class AppleFactory implements FruitFactory{  function makeDrink()  {    return new AppleDrink();  }}class BananaFactory implements FruitFactory{  function makeDrink()  {    return new BananaDrink();  }}$appleFactory = new AppleFactory();$apple = $appleFactory->makeDrink();$apple->getDrinkName();echo "<br/>";$bananaFactory = new BananaFactory();$banana = $bananaFactory->makeDrink();$banana->getDrinkName();

運行結果:

蘋果味飲料
香蕉味飲料

現在當再次需要增加桔子味飲料時,只需要增加桔子味飲料產品和桔子味飲料工廠即可,不需要改動原來的代碼

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

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

總結:

無論是簡單工廠模式,工廠方法模式,還是抽象工廠模式,他們都屬于工廠模式,在形式和特點上也是極為相似的,他們的最終目的都是為了解耦。在使用時,我們不必去在意這個模式到底工廠方法模式還是抽象工廠模式,因為他們之間的演變常常是令人琢磨不透的。經常你會發現,明明使用的工廠方法模式,當新需求來臨,稍加修改,加入了一個新方法后,由于類中的產品構成了不同等級結構中的產品族,它就變成抽象工廠模式了;而對于抽象工廠模式,當減少一個方法使的提供的產品不再構成產品族之后,它就演變成了工廠方法模式。所以,在使用工廠模式時,只需要關心降低耦合度的目的是否達到了

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九精品视频在线观看| 日韩免费av一区二区| 日韩国产欧美区| 久久久噜久噜久久综合| 欧美日韩一区二区免费在线观看| 亚洲国产91精品在线观看| 亚洲人免费视频| 国语自产偷拍精品视频偷| 色在人av网站天堂精品| 91高清视频免费观看| 91久久久久久久久久久久久| 成人福利网站在线观看| 亚洲日韩欧美视频一区| 国产精品嫩草影院一区二区| 2021久久精品国产99国产精品| 欧美激情在线狂野欧美精品| 亚洲无av在线中文字幕| 亚洲性线免费观看视频成熟| 国产精品视频最多的网站| 91在线视频九色| 欧美乱妇高清无乱码| 国产精品久久久久久中文字| 777午夜精品福利在线观看| 欧美精品久久久久久久久| 51视频国产精品一区二区| 日本久久久久亚洲中字幕| 午夜精品福利在线观看| 午夜精品久久久久久久久久久久| 亚洲一区二区三区毛片| 亚洲一区二区三区成人在线视频精品| 国产精品午夜一区二区欲梦| 亚洲第一视频网| 日本精品久久久久影院| 国产精品一区av| 夜夜嗨av色综合久久久综合网| 久久久999精品| 欧美日韩成人在线观看| 久久视频这里只有精品| 国产欧美精品在线播放| 久久久伊人欧美| 欧美大码xxxx| 精品亚洲va在线va天堂资源站| 成人春色激情网| 久久国产精品久久久久| 黑人巨大精品欧美一区二区三区| 国产成人一区三区| 国产精品福利网| 在线丨暗呦小u女国产精品| 成人黄色免费看| 亚洲小视频在线| 亚洲综合一区二区不卡| 欧美精品18videos性欧美| 日韩精品在线观看一区| 欧美视频在线看| 欧美国产精品日韩| 美日韩精品免费观看视频| 日韩黄色高清视频| 尤物99国产成人精品视频| 亚洲欧洲美洲在线综合| 国产精品久久中文| 中文字幕欧美精品日韩中文字幕| 在线亚洲国产精品网| 亚洲精品一区二区网址| 国产精品久久久久久久美男| 欧美日韩国产中文精品字幕自在自线| 91人人爽人人爽人人精88v| 色哟哟网站入口亚洲精品| 精品香蕉一区二区三区| 亚洲免费成人av电影| 久久久免费观看视频| 黄色一区二区三区| 精品久久久久久久久中文字幕| 久久久精品电影| 久久成人精品一区二区三区| 国产精品露脸av在线| 欧美第一黄网免费网站| 日韩视频免费观看| 亲爱的老师9免费观看全集电视剧| 亚洲a∨日韩av高清在线观看| 精品久久久中文| 成人国内精品久久久久一区| 亚洲自拍欧美色图| 欧洲成人在线观看| 久久99精品久久久久久青青91| 2019中文字幕在线免费观看| 久久久久久久久久久91| 中文国产成人精品| 成人av色在线观看| 日韩午夜在线视频| 欧美激情精品在线| 国产精品老女人精品视频| 狠狠综合久久av一区二区小说| 国内外成人免费激情在线视频| 综合国产在线观看| 亚洲国产欧美久久| 国产日韩欧美日韩大片| 久久久久久有精品国产| 在线丨暗呦小u女国产精品| 国产丝袜一区视频在线观看| 国产精品第100页| 色无极影院亚洲| 欧美日韩国产黄| 国产99久久精品一区二区永久免费| 精品国产成人在线| 久久精品久久精品亚洲人| 日韩电影中文字幕在线观看| 91在线高清免费观看| 美女999久久久精品视频| 亚洲精品自拍偷拍| 91成人性视频| 81精品国产乱码久久久久久| 一本一道久久a久久精品逆3p| 九九热精品视频国产| 国产精品视频永久免费播放| 国产丝袜一区二区三区免费视频| 久久免费精品日本久久中文字幕| 欧美激情伊人电影| 国色天香2019中文字幕在线观看| 亚洲欧美日韩爽爽影院| 亚洲欧美日韩天堂一区二区| 中文字幕国产精品| 日韩一区二区在线视频| 欧美日韩人人澡狠狠躁视频| 日韩中文字幕av| 亚洲国产精品人人爽夜夜爽| 福利精品视频在线| 日本19禁啪啪免费观看www| 成人羞羞国产免费| 欧美在线国产精品| 欧美高清视频在线观看| 欧美三级欧美成人高清www| 深夜福利一区二区| 亚洲国产日韩欧美综合久久| 91成人天堂久久成人| 亚洲va欧美va国产综合久久| 丝袜美腿亚洲一区二区| 日韩av资源在线播放| 亚洲性xxxx| 精品亚洲一区二区三区| 欧美理论在线观看| 欧美夫妻性生活视频| 日韩精品中文字幕久久臀| 欧美大片va欧美在线播放| 国产成人午夜视频网址| 久久综合九色九九| 欧美在线观看网址综合| 欧美大尺度在线观看| 日韩免费电影在线观看| 亚洲第一页在线| 色综合天天狠天天透天天伊人| 欧美精品一区三区| 久久精品电影网站| xxav国产精品美女主播| 91精品国产乱码久久久久久久久| 国产精品国产自产拍高清av水多| 亚洲国产成人久久| 欧美激情亚洲综合一区| 色播久久人人爽人人爽人人片视av| 国产伦精品一区二区三区精品视频| 色哟哟入口国产精品| 国产精品扒开腿做爽爽爽的视频| 日韩一区二区三区xxxx| 精品免费在线视频| 国产亚洲精品一区二区|