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

主頁 > 知識庫 > PHP設(shè)計模式之工廠模式定義與用法詳解

PHP設(shè)計模式之工廠模式定義與用法詳解

熱門標(biāo)簽:四川保險智能外呼系統(tǒng)供應(yīng)商 電話機(jī)器人銷售主要負(fù)責(zé)什么 長沙做地圖標(biāo)注公司 遼寧ai電銷機(jī)器人價格 上海做外呼線路的通信公司 寧波外呼營銷系統(tǒng) 福建銀行智能外呼系統(tǒng)價格 地圖標(biāo)注專員怎么樣 房產(chǎn)中介用的是什么外呼系統(tǒng)

本文實(shí)例講述了PHP設(shè)計模式之工廠模式定義與用法。分享給大家供大家參考,具體如下:

工廠模式(Factory Design Pattern)作為一種創(chuàng)建型設(shè)計模式, 遵循了開放-封閉原則, 對修改封閉, 對擴(kuò)展開放. 工廠方法(Factory Method)模式就是要創(chuàng)建"某種東西". 對于工廠方法模式, 要創(chuàng)建的"東西"是一個產(chǎn)品,這個產(chǎn)品與創(chuàng)建它的類之間不存在綁定.實(shí)際上,為了保持這種松耦合,客戶會通過一個工廠發(fā)出請求. 再由工廠創(chuàng)建所請求的產(chǎn)品.也可以換種方式考慮, 利用工廠方法模式, 請求者只發(fā)出請求, 而不具體創(chuàng)建產(chǎn)品.

工廠的工作

先建立一個工廠的接口

Factory.php

?php
abstract class Factory
{
 //抽象的創(chuàng)建對象的方法
 protected abstract function createProduct();
 //該方法調(diào)用createProduct方法返回一個產(chǎn)品對象.
 public function start()
 {
   return $this->createProduct();
 }
}

start方法返回一個產(chǎn)品,該方法調(diào)用createProduct方法完成產(chǎn)生產(chǎn)品的操作.所以createProduct的具體實(shí)現(xiàn)要構(gòu)建并返回一個按Product接口實(shí)現(xiàn)的產(chǎn)品對象.

比如產(chǎn)品都有一個共同的方法getProperties(), 以下是對應(yīng)Product接口

Product.php

?php
//產(chǎn)品接口
interface Product
{
 public function getProperties();
}

接著, 我們要建立兩個工廠,文本工廠TextFactory和圖像工廠phptoFactory

TextFactory.php

?php
include_once('Factory.php');
include_once('TextProduct.php');
class TextFactory extends Factory
{
 protected function createProduct()
 {
  $product = new TextProduct();
  return $product->getProperties();
 }
}

PhotoFactory.php

?php
include_once('Factory.php');
include_once('PhotoProduct.php');
class PhotoFactory extends Factory
{
 protected function createProduct()
 {
  $product = new PhotoProduct();
  return $product->getProperties();
 }
}

可以看到,在工廠方法的實(shí)現(xiàn)中, getProperties方法引入了多態(tài)(polymorphism), 將用這個方法返回"文本"或"圖像". 同一個getProperties()有多個(poly)不同的形態(tài)(morphs), 這就是多態(tài).在這種情況下, 其中一種形式返回文本, 而另一種返回圖像.

可以在properties這個實(shí)現(xiàn)中放入你想要的任何東西,工廠方法設(shè)計將會創(chuàng)建這個對象, 并把他返回給Client使用.

下面的是兩個產(chǎn)品的實(shí)現(xiàn)

TextProduct.php

?php
include_once('Product.php');
class TextProduct implements Product
{
 public function getProperties()
 {
  return "這里是文本產(chǎn)品";
 }
}

PhotoProduct.php

?php
include_once('Product.php');
class PhotoProduct implements Product
{
 //這是產(chǎn)品具有的方法
 public function getProperties()
 {
  return "這里是圖像產(chǎn)品";
 }
}

這兩個產(chǎn)品實(shí)現(xiàn)了Product接口中的抽象方法getProperties(),

客戶(Client)

我們并不希望客戶直接做出產(chǎn)品請求.實(shí)際上, 我們希望客戶通過Factory工廠接口做出請求.這樣一來,如果以后我們增加了產(chǎn)品或者工廠, 客戶可以做同樣的請求來得到更多類型的產(chǎn)品 , 而不會破壞這個應(yīng)用:

Client.php

?php
include_once('PhotoFactory.php');
include_once('TextFactory.php');
class Client
{
 public function __construct()
 {
  $this->somePhotoObject = new PhotoFactory();
  echo $this->somePhotoObject->start() . 'br />';
  $this->someTextObject = new TextFactory();
  echo $this->someTextObject->start() . 'br />';
 }
}
$worker = new Client();

運(yùn)行Client.php, 得到下面的結(jié)果

這里是圖像產(chǎn)品
這里是文本產(chǎn)品

注意: Client對象并沒有向產(chǎn)品直接做出請求, 而是通過工廠來請求. 重要的是, 客戶并不實(shí)現(xiàn)產(chǎn)品特性, 而留給產(chǎn)品實(shí)現(xiàn)來體現(xiàn).

調(diào)整產(chǎn)品

設(shè)計模式的真正價值并不是提高操作的速度, 而是加快開發(fā)的速度.

如果現(xiàn)在需求變化了, 需要對圖像產(chǎn)品做出修改, 只需要修改相應(yīng)的產(chǎn)品PhotoProduct的getProperties方法即可

對象的改變看起來很簡單 不過Product的getProperties()方法仍保持相同的接口,請求工廠返回一個屬性對象

增加新產(chǎn)品和參數(shù)化請求

問題來了,如果要增加更多的圖像和文本說明, 有沒有必要每次增加一個新的區(qū)域就增加一個新的具體的工廠類?這意味著要為每個新區(qū)域增加一個新工廠和產(chǎn)品.于是,我們引進(jìn)了參數(shù)化工廠設(shè)計模式

參數(shù)化工廠設(shè)計模式和一般的工廠設(shè)計模式的主要區(qū)別之一是客戶包含工廠和產(chǎn)品的引用. 在參數(shù)化請求中, Client類必須指定產(chǎn)品, 而不是產(chǎn)品工廠. createProduct()操作中的參數(shù)是由客戶傳入一個產(chǎn)品; 所以客戶必須指出它想要的具體產(chǎn)品. 不過, 這個請求仍然是通過工廠接口Factory發(fā)出的. 所以, 盡管客戶包含一個產(chǎn)品引用, 但通過Factory, 客戶仍然與產(chǎn)品分離.

一個工廠多個產(chǎn)品(參數(shù)化工廠方法)

對于大多數(shù)請求, 參數(shù)化工廠方法更為簡單, 因為客戶只需要處理一個具體工廠.工廠方法操作有一個參數(shù),指示需要創(chuàng)建的產(chǎn)品.而在原來的設(shè)計中, 每個產(chǎn)品都有自己的工廠, 不需要另個傳遞參數(shù); 產(chǎn)品實(shí)現(xiàn)依賴于各個產(chǎn)品特定的工廠.

新工廠接口

Factory.php

?php
abstract class Factory
{
 //抽象的創(chuàng)建對象的方法
 protected abstract function createProduct(Product $product);
 //該方法由factoryMethod方法返回一個產(chǎn)品對象.
 public function start($product)
 {
   return $this->createProduct($product);
 }
}

在這個新的Factory接口中可以看到, create()start()都需要一個參數(shù),指定一個Product對象, 而不是Product接口的一個特定實(shí)現(xiàn), 所以可以接受任何Product的具體實(shí)例.

工廠具體實(shí)現(xiàn)

具體的創(chuàng)建者類CommonFactory實(shí)現(xiàn)了createProduct(),如下

CommonFactory.php

?php
include_once('Factory.php');
include_once('Product.php');
class CommonFactory extends Factory
{
 protected function createProduct(Product $product)
 {
  return $product->getProperties();
 }
}

這個類調(diào)用Product的方法getProperties將產(chǎn)品返回給客戶.

新產(chǎn)品

具體產(chǎn)品的變化并不會改變原來的Product接口,還是原來的代碼

?php
//產(chǎn)品接口
interface Product
{
 public function getProperties();
}

例如, 現(xiàn)在有一個鋼筆產(chǎn)品PenProduct

PenProduct.php

?php
include_once('Product.php');
class PenProduct implements Product
{
 public function getProperties()
 {
  return "鋼筆產(chǎn)品";
 }
}

客戶Clent(有參數(shù))

?php
include_once('CommonFactory.php');
include_once('PenProduct.php');
class Client
{
 public function __construct()
 {
  $commonFactory = new CommonFactory();
  echo $commonFactory->start(new PenProduct());
 }
}
$worker = new Client();

運(yùn)行后輸出

鋼筆產(chǎn)品

以后如果開發(fā)出了新的產(chǎn)品, 只需要創(chuàng)建對應(yīng)的產(chǎn)品類, 然后客戶指定想要的新產(chǎn)品 , 即可返回客戶需要的產(chǎn)品.

總結(jié):

產(chǎn)品改變: 接口不變

使用設(shè)計模式的一大好處就是可以很容易地對類做出改變, 而不會破壞更大的程序. 之所以能夠容易地做出改變, 秘訣在于保持接口不變, 而只改變內(nèi)容.

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

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

您可能感興趣的文章:
  • php單態(tài)設(shè)計模式(單例模式)實(shí)例
  • php設(shè)計模式 Singleton(單例模式)
  • 基于php設(shè)計模式中單例模式的應(yīng)用分析
  • 學(xué)習(xí)php設(shè)計模式 php實(shí)現(xiàn)單例模式(singleton)
  • PHP設(shè)計模式之單例模式原理與實(shí)現(xiàn)方法分析
  • PHP設(shè)計模式之抽象工廠模式實(shí)例分析
  • PHP設(shè)計模式之簡單工廠和工廠模式實(shí)例分析
  • PHP設(shè)計模式之模板方法模式實(shí)例淺析
  • PHP設(shè)計模式之單例模式定義與用法分析

標(biāo)簽:佛山 宿遷 常德 深圳 延安 宜春 工商登記 澳門

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《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)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品伊人色| 国产剧情av麻豆香蕉精品| 日韩在线a电影| 久色婷婷小香蕉久久| 91国模大尺度私拍在线视频| 6080国产精品一区二区| 午夜精品久久久久久久99樱桃| 99久久精品国产麻豆演员表| 亚洲精品中文在线影院| 欧美色综合影院| 亚洲男女一区二区三区| 亚洲在线观看免费| 在线观看视频一区二区| 一区二区三区欧美| 欧美精品777| 久久成人18免费观看| 精品国精品国产尤物美女| 国产a久久麻豆| 亚洲成人av一区二区| 日韩一级免费观看| 国产精品一卡二卡在线观看| 欧美一区二区三区性视频| 久久精品国产77777蜜臀| 国产精品成人免费精品自在线观看| 国产不卡在线播放| 一区二区三区四区中文字幕| 91精品国产综合久久福利| 国产成人精品在线看| 亚洲欧美视频在线观看视频| 91精品国产综合久久久久久久| 不卡一区中文字幕| 青草国产精品久久久久久| 亚洲色图欧美激情| 免费成人在线影院| 亚洲一线二线三线久久久| 欧美一级在线免费| 在线免费观看不卡av| 黄色日韩网站视频| 亚洲超碰97人人做人人爱| 伊人色综合久久天天| 亚洲国产精品v| 国产日产欧美精品一区二区三区| 国产欧美日韩在线观看| 成人永久免费视频| 九色porny丨国产精品| 日本午夜一本久久久综合| 亚洲女爱视频在线| 一区二区成人在线| 亚洲综合999| 久久综合成人精品亚洲另类欧美 | 九九国产精品视频| 国产精品二区一区二区aⅴ污介绍| 欧美一区在线视频| 欧美视频日韩视频在线观看| 精品一区二区免费| 日本中文字幕一区二区视频| 一区二区国产盗摄色噜噜| 亚洲一二三四久久| 欧美亚洲国产一卡| 波多野结衣一区二区三区| 欧美激情在线一区二区| 国产精品一卡二卡| 国产精品久久免费看| 99久久精品免费| 亚洲成人第一页| 亚洲精品一区二区三区在线观看 | 久久精品久久久精品美女| 欧美欧美欧美欧美首页| 日韩中文字幕亚洲一区二区va在线| 欧美乱妇23p| 国产伦精品一区二区三区免费迷| 国产性做久久久久久| 波多野结衣在线一区| 一区二区三区四区亚洲| 日韩免费高清av| 99久久久久久99| 亚洲最大色网站| 亚洲精品在线观看网站| 久久99精品国产.久久久久久 | 日韩精品电影在线观看| 欧美一区二区三区精品| 成人app软件下载大全免费| 亚洲另类春色校园小说| 91精品一区二区三区久久久久久 | www.亚洲精品| 日本成人在线视频网站| 国产精品久久久久久亚洲毛片| 欧美在线免费视屏| 成人污视频在线观看| 午夜视频在线观看一区二区三区| 国产性色一区二区| 欧美精品一区二区三区一线天视频| 99精品欧美一区二区三区小说| 久久99精品一区二区三区三区| 一区二区中文视频| 欧美国产97人人爽人人喊| 欧美videossexotv100| 91精品国产综合久久精品app | 国产在线精品视频| 老鸭窝一区二区久久精品| 日韩在线一区二区| 亚洲国产成人tv| 婷婷综合五月天| 午夜激情一区二区三区| 日韩国产精品久久久久久亚洲| 午夜伊人狠狠久久| 日本午夜精品一区二区三区电影 | 26uuu亚洲| 久久无码av三级| 国产精品理伦片| 亚洲综合清纯丝袜自拍| 亚洲精品成a人| 亚洲成人一二三| 老鸭窝一区二区久久精品| 国产高清久久久| 欧美性生交片4| 这里只有精品免费| 久久综合久久综合久久综合| 日韩视频123| 国产亚洲精品资源在线26u| 国产精品美女久久久久高潮| 欧美激情一区二区三区| 一区二区三区国产精华| 亚洲一卡二卡三卡四卡无卡久久| 亚洲图片欧美色图| 美国精品在线观看| 成人精品电影在线观看| 色综合久久天天综合网| 日韩欧美国产一区二区在线播放| 欧美一级生活片| 亚洲欧美色图小说| 韩国精品主播一区二区在线观看| 91一区在线观看| 欧美一级理论片| 亚洲在线观看免费视频| 大尺度一区二区| 久久久99精品免费观看不卡| 亚洲香肠在线观看| 日本 国产 欧美色综合| 亚洲国产高清在线观看视频| 久久久777精品电影网影网| 国产精品乱码久久久久久| 亚洲国产另类av| 狠狠网亚洲精品| 成人午夜视频网站| 欧美精品一区二区在线播放 | av中文一区二区三区| 在线视频欧美精品| 国产精品成人在线观看| 91在线视频播放地址| 久久综合色8888| 国产一区二区三区最好精华液| 精品国产成人系列| 国产麻豆精品视频| 精品嫩草影院久久| 亚洲国产精品精华液网站| 欧美区视频在线观看| 亚洲高清在线视频| 日韩欧美国产小视频| 国产成人自拍高清视频在线免费播放| 欧美一卡二卡三卡四卡| 精品一区二区在线看| 国产午夜精品一区二区| 成人激情午夜影院| 亚洲午夜国产一区99re久久| 欧美少妇一区二区| 久久精品国产一区二区| 国产精品美女久久久久久久久久久| 国产高清一区日本| 一区二区三区美女视频| 这里是久久伊人| 国产福利一区二区三区| 一区二区欧美在线观看| 欧美影院一区二区| 国产精品18久久久久久久久久久久| 中文字幕日本不卡| 欧美日韩免费不卡视频一区二区三区| 亚洲风情在线资源站| 7777精品伊人久久久大香线蕉| 国产一区二区视频在线播放| 亚洲精品国产成人久久av盗摄 | 日韩亚洲电影在线| 国产高清不卡二三区| 美女久久久精品| 国产三区在线成人av| 欧美日韩三级在线| 成人免费看视频| 久久成人羞羞网站| 午夜一区二区三区在线观看| 国产视频一区在线播放| 欧美精品日韩综合在线| 不卡一区中文字幕| 日本免费在线视频不卡一不卡二| 欧美激情一区二区在线| 欧美一区二区视频免费观看| 99精品桃花视频在线观看| 免费人成网站在线观看欧美高清| 亚洲欧美一区二区在线观看| 国产精品亲子乱子伦xxxx裸| 久久久国产精品不卡|