婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP設計模式之簡單工廠和工廠模式實例分析

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

熱門標簽:七魚外呼系統(tǒng)停用嗎 保定crm外呼系統(tǒng)運營商 智能電話機器人排名前十名南京 海南人工外呼系統(tǒng)有效果嗎 阿里云400電話申請加工單 地下城堡2圖九地圖標注 西區(qū)企業(yè)怎么做地圖標注入駐 九江外呼系統(tǒng) 抖音有個地圖標注是什么意思

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

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

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

?php
class 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(醒目)這種接中國地氣的名字(麥當勞改成金拱門)

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

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

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

?php
class 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();

運行結果:

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

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

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

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

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

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

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

?php
interface 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();

運行結果:

蘋果味飲料
香蕉味飲料

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

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

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

總結:

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

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

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

您可能感興趣的文章:
  • php設計模式 Decorator(裝飾模式)
  • PHP面向對象程序設計組合模式與裝飾模式詳解
  • php設計模式之策略模式應用案例詳解
  • PHP中常用的三種設計模式詳解【單例模式、工廠模式、觀察者模式】
  • PHP經典設計模式之依賴注入定義與用法詳解
  • PHP設計模式之策略模式原理與用法實例分析
  • PHP設計模式之觀察者模式定義與用法分析
  • PHP設計模式之單例模式定義與用法分析
  • PHP設計模式之抽象工廠模式實例分析
  • PHP設計模式之觀察者模式(Observer)詳細介紹和代碼實例
  • php設計模式之裝飾模式應用案例詳解

標簽:涼山 韶關 甘肅 九江 昭通 十堰 梅河口 遼陽

巨人網絡通訊聲明:本文標題《PHP設計模式之簡單工廠和工廠模式實例分析》,本文關鍵詞  PHP,設計模式,之,簡單,工廠,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP設計模式之簡單工廠和工廠模式實例分析》相關的同類信息!
  • 本頁收集關于PHP設計模式之簡單工廠和工廠模式實例分析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产超碰在线一区| 欧美福利视频导航| 欧美一区二区视频免费观看| 国产精品久久久久永久免费观看| 日韩精品一卡二卡三卡四卡无卡| 成人听书哪个软件好| 91.xcao| 日韩欧美一区二区久久婷婷| 亚洲欧美一区二区三区国产精品| 国产麻豆精品在线观看| 日韩欧美一区中文| 麻豆国产精品一区二区三区| 日韩一区二区三区电影| 免费久久99精品国产| 成人精品视频一区二区三区 | 国产亚洲精品bt天堂精选| 精品久久一二三区| 欧美国产日产图区| 国产福利精品一区| 91国产精品成人| 欧美午夜影院一区| 欧美精品一二三| 日韩欧美亚洲另类制服综合在线| 欧美一区三区二区| 久久综合中文字幕| 国产精品女同一区二区三区| ...av二区三区久久精品| 亚洲欧美另类久久久精品| 美女诱惑一区二区| 欧美一二区视频| 国产精品中文有码| 中文字幕av一区二区三区| 欧美视频一区在线观看| 五月天激情小说综合| 日韩一级大片在线| 高清不卡一区二区| 在线观看视频91| 日韩精品一区二区三区四区视频| 国产精品性做久久久久久| 欧美在线一二三| 亚洲欧美经典视频| 欧美影片第一页| 亚洲精品成a人| 一本大道久久a久久精品综合| 久久丝袜美腿综合| 国内不卡的二区三区中文字幕| 欧美日韩美女一区二区| 亚洲美女区一区| 91免费观看视频| 亚洲国产精品久久久久婷婷884| 一卡二卡欧美日韩| 久久精品国产成人一区二区三区| 欧美精品精品一区| 亚洲成a人片在线不卡一二三区| 色av成人天堂桃色av| 一区二区三区国产豹纹内裤在线| 91丨九色丨尤物| 亚洲自拍偷拍麻豆| 精品国产伦理网| 国产99精品视频| 日韩黄色免费电影| 中文字幕亚洲一区二区av在线| 国产欧美日韩亚州综合| 国产欧美日韩三区| 亚洲成人av电影在线| 欧美日韩综合一区| 国产午夜亚洲精品羞羞网站| 亚洲一区二区三区视频在线 | 日韩午夜在线播放| 欧美老年两性高潮| 不卡的av网站| 国内成人精品2018免费看| 午夜免费欧美电影| 国产亚洲精久久久久久| 在线看日韩精品电影| 国产一区二区三区免费| 亚洲精品五月天| 国产精品久久久久久久久果冻传媒 | 色狠狠一区二区| 粉嫩高潮美女一区二区三区| 男人的天堂久久精品| 日本女人一区二区三区| 亚洲国产成人91porn| 亚洲成人av在线电影| 亚洲伊人伊色伊影伊综合网| 一区二区在线观看av| 一区二区三区欧美| 日本在线观看不卡视频| 亚洲精品自拍动漫在线| 国产ts人妖一区二区| 欧美精品一区二区三区在线播放| 国产精品天天看| 国产河南妇女毛片精品久久久| 在线观看精品一区| 亚洲一区二区三区四区不卡| 国产成人av电影在线播放| 91精品国产欧美一区二区| 一区二区三区四区在线| 久草这里只有精品视频| 日韩欧美一区二区久久婷婷| 国产精品久久久久久久久图文区| 国产精品色哟哟网站| 亚洲欧美乱综合| 亚洲另类在线制服丝袜| 亚洲一区二区中文在线| 一区二区欧美在线观看| 天天色综合成人网| 国产伦精品一区二区三区在线观看| caoporm超碰国产精品| 欧美日本一区二区在线观看| 国产日韩欧美不卡在线| 亚洲成人免费在线观看| 高清免费成人av| 日韩一级完整毛片| 亚洲第一二三四区| 91在线丨porny丨国产| 日本一区二区三区国色天香| 午夜精品久久久久久| 99re6这里只有精品视频在线观看| 91在线精品一区二区| 国产精品久久久久久福利一牛影视| 国产一区二三区| 久久国产精品99久久人人澡| 国产真实乱对白精彩久久| 99免费精品视频| 日韩欧美高清在线| 亚洲综合一区二区精品导航| 一区二区三区鲁丝不卡| 成人app网站| 亚洲丝袜另类动漫二区| 99久久久无码国产精品| 亚洲图片欧美综合| 亚洲国产精品成人久久综合一区| 欧美图区在线视频| 国产成人超碰人人澡人人澡| 国产亚洲午夜高清国产拍精品| 国产综合色精品一区二区三区| 波多野结衣亚洲| 亚洲欧美日韩国产成人精品影院| 亚洲国产精品视频| 精品国产1区二区| 亚洲乱码精品一二三四区日韩在线| 亚洲欧美日韩国产另类专区| 国产成+人+日韩+欧美+亚洲| 一本色道久久综合狠狠躁的推荐| 欧美精品一区二区久久婷婷 | 亚洲电影第三页| 色国产综合视频| 亚洲黄色小说网站| 日本在线不卡视频一二三区| 精品视频在线看| 亚洲激情av在线| 91麻豆福利精品推荐| 日韩一区二区在线观看视频 | 日韩av二区在线播放| 4438x亚洲最大成人网| 午夜av电影一区| 欧美哺乳videos| 成人小视频免费观看| 国产精品水嫩水嫩| 国产一区三区三区| 欧美精品一区二区三区四区| 欧美大尺度电影在线| 正在播放一区二区| 日日骚欧美日韩| 日韩精品中午字幕| 国产精品伊人色| 亚洲人成在线播放网站岛国| 欧美一二三区在线| 精品久久久影院| 91精品久久久久久久91蜜桃| 欧美三级三级三级| 在线亚洲人成电影网站色www| 国产成人午夜精品影院观看视频 | 香蕉加勒比综合久久| 亚洲一级在线观看| 一本久久精品一区二区| 亚洲福利视频导航| 国产欧美一区二区精品仙草咪| 91免费国产在线| 蜜臀精品一区二区三区在线观看 | 亚洲免费资源在线播放| 成人av在线一区二区| 亚洲国产精品v| 精品国产伦一区二区三区观看方式| 成人免费毛片aaaaa**| 国产suv精品一区二区6| 亚洲人成人一区二区在线观看| 91精品国产综合久久久久久| 色综合久久久久综合| 色噜噜狠狠色综合欧洲selulu| 国产丶欧美丶日本不卡视频| 日韩不卡一二三区| 中文字幕日本不卡| 成人免费视频视频| 91丨九色丨黑人外教| 欧美三级韩国三级日本三斤| 色激情天天射综合网| 亚洲男人的天堂av| 一级做a爱片久久|