校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

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

PHP設(shè)計模式之簡單工廠和工廠模式實例分析

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

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

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

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

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

運行結(jié)果:

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

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

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

你會發(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();

運行結(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)化,適用于工廠類負責(zé)創(chuàng)建的對象比較少,客戶只知道傳入了工廠類的參數(shù),對于如何創(chuàng)建對象(邏輯)不關(guān)心,簡單工廠模式又叫靜態(tài)工廠模式 可以把工廠類的方法寫成靜態(tài)方法 在不需要實例化工廠的前提下 直接調(diào)用靜態(tài)方法 返回所需實例

好的,那么接下來,問題又來了,公司準備多元化產(chǎn)品,增加桔子味飲料,那么我們需要怎么做呢,首先要增加桔子味飲料類,然后需要在工廠里增加判斷,當(dāng)水果標識是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è)計原則,對擴展開放,對更改關(guān)閉,那么有沒有辦法,在不更改原有代碼的基礎(chǔ)上,增加產(chǎn)品呢

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

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

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

總結(jié):

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

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《PHP設(shè)計模式之簡單工廠和工廠模式實例分析》,本文關(guān)鍵詞  PHP,設(shè)計模式,之,簡單,工廠,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP設(shè)計模式之簡單工廠和工廠模式實例分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP設(shè)計模式之簡單工廠和工廠模式實例分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产精品成人一区二区三区夜夜夜| 国产乱子轮精品视频| 亚洲一卡二卡三卡四卡五卡| 亚洲综合在线视频| 亚洲国产日韩av| 亚洲曰韩产成在线| 亚洲综合自拍偷拍| 日韩一级欧美一级| 成人黄动漫网站免费app| 99久久久无码国产精品| 91国偷自产一区二区开放时间 | 91黄视频在线| 99re在线精品| 欧美高清视频不卡网| 日韩三区在线观看| 精品国产凹凸成av人导航| 国产视频不卡一区| 亚洲欧美一区二区三区极速播放| 亚洲男同1069视频| 日本不卡123| 成人午夜激情影院| 91麻豆精东视频| 欧美久久久久久久久久| 精品欧美一区二区三区精品久久| 欧美激情一区二区三区不卡| 一区二区视频在线看| 日日夜夜免费精品| 日本不卡免费在线视频| 国产盗摄一区二区三区| 欧美性猛交xxxxxx富婆| 欧美sm美女调教| 亚洲视频你懂的| 日本不卡视频在线| 99这里只有久久精品视频| 欧美成人r级一区二区三区| 亚洲精品中文在线影院| 国产成人在线视频网站| 91精品国产免费久久综合| 亚洲天堂福利av| 国产高清亚洲一区| 69精品人人人人| 亚洲精品国产成人久久av盗摄| 久久99久久99精品免视看婷婷| 欧美唯美清纯偷拍| 日韩伦理av电影| 成人免费视频app| www国产精品av| 三级在线观看一区二区| 在线免费观看日本一区| 国产欧美一区二区三区网站| 久久精品久久综合| 欧美军同video69gay| 亚洲美女屁股眼交3| 国产电影一区二区三区| 26uuu色噜噜精品一区二区| 午夜精品福利在线| 欧美伊人久久久久久久久影院 | 亚洲最快最全在线视频| 国产在线播放一区二区三区| 欧美日本在线一区| 亚洲一级电影视频| 91福利视频久久久久| 国产精品家庭影院| 波多野结衣一区二区三区 | 丰满少妇久久久久久久| 久久蜜臀中文字幕| 精品亚洲aⅴ乱码一区二区三区| 欧美一区二区三区啪啪| 亚洲福利一区二区| 欧美日韩一本到| 午夜欧美大尺度福利影院在线看| 色婷婷久久一区二区三区麻豆| 自拍偷在线精品自拍偷无码专区| www.亚洲激情.com| 亚洲欧美综合在线精品| 99久久婷婷国产综合精品电影| 日本一区二区免费在线| 粉嫩嫩av羞羞动漫久久久| 久久精品亚洲麻豆av一区二区| 国产一区二区主播在线| 久久日韩精品一区二区五区| 国产剧情一区二区三区| 日本一区二区三区久久久久久久久不| 国产一区二区在线电影| 国产欧美综合色| 97久久久精品综合88久久| 亚洲日本在线视频观看| 在线亚洲一区二区| 天堂蜜桃91精品| 欧美一级二级三级蜜桃| 国产一区欧美一区| 国产精品视频免费看| 91麻豆成人久久精品二区三区| 亚洲另类春色校园小说| 欧美色综合天天久久综合精品| 天堂精品中文字幕在线| 欧美电影精品一区二区| 国产高清不卡二三区| 亚洲欧美日韩一区| 欧美久久一区二区| 久久国产精品72免费观看| 国产视频一区在线观看| 国产在线观看免费一区| 日本韩国一区二区三区视频| 亚洲国产精品人人做人人爽| 欧美一级久久久| 国产一区二区成人久久免费影院 | 精品夜夜嗨av一区二区三区| 久久久精品日韩欧美| 91美女视频网站| 日韩精品高清不卡| 久久青草欧美一区二区三区| 99在线热播精品免费| 日韩一区精品视频| 国产色综合久久| 欧美视频一二三区| 国内精品第一页| 一区二区三区.www| 亚洲精品一区二区三区99| 成人av电影在线观看| 亚洲午夜电影在线观看| 久久久久久久久久久久久久久99| 成人免费高清视频| 首页综合国产亚洲丝袜| 国产精品免费网站在线观看| 欧美日韩亚洲高清一区二区| 国产精品自产自拍| 亚洲午夜精品一区二区三区他趣| 亚洲精品一区二区三区在线观看| 91麻豆swag| 国产一区久久久| 亚洲成人精品在线观看| 国产精品午夜在线观看| 91精品国产综合久久小美女| 成人黄色a**站在线观看| 日本视频中文字幕一区二区三区| 中文字幕免费一区| 91精品国产综合久久福利软件| 成人av在线影院| 久久国产精品99久久久久久老狼| 最新久久zyz资源站| 精品精品国产高清一毛片一天堂| 91麻豆精东视频| 国产一区二区不卡| 性做久久久久久免费观看| 国产精品无遮挡| 精品国产髙清在线看国产毛片| 色8久久人人97超碰香蕉987| 国产一区二区免费看| 日韩中文字幕不卡| 亚洲精品视频在线看| 国产日韩欧美在线一区| 69久久99精品久久久久婷婷 | 亚洲国产成人av| 中文字幕一区不卡| 久久久五月婷婷| 日韩视频一区二区| 欧美色图天堂网| 91美女蜜桃在线| 国产91清纯白嫩初高中在线观看| 久久se这里有精品| 日韩av在线免费观看不卡| 亚洲综合免费观看高清在线观看| 国产精品家庭影院| 日本一区二区免费在线观看视频| 精品乱人伦小说| 欧美精品免费视频| 欧美日韩中文国产| 在线精品国精品国产尤物884a| 波多野结衣一区二区三区 | 久久网这里都是精品| 欧美成人精品二区三区99精品| 欧美精品一二三区| 欧美视频精品在线| 欧美视频三区在线播放| 精品1区2区3区| 欧美日韩免费一区二区三区视频| 欧洲精品视频在线观看| 一本一道综合狠狠老| 91视视频在线观看入口直接观看www | 91天堂素人约啪| 色哟哟国产精品| 91高清视频免费看| 欧美在线观看视频一区二区| 99精品视频在线免费观看| gogo大胆日本视频一区| 暴力调教一区二区三区| 91在线无精精品入口| 色婷婷综合中文久久一本| 色婷婷狠狠综合| 欧美性大战久久久久久久| 欧美亚洲综合在线| 欧美日韩国产精选| 欧美精品一级二级三级| 日韩精品一区二区在线观看| 久久亚区不卡日本| 欧美极品xxx| 亚洲乱码精品一二三四区日韩在线| 亚洲男人的天堂网| 一区二区三区成人|