欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

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

PHP設計模式之工廠模式定義與用法詳解

熱門標簽:四川保險智能外呼系統供應商 電話機器人銷售主要負責什么 長沙做地圖標注公司 遼寧ai電銷機器人價格 上海做外呼線路的通信公司 寧波外呼營銷系統 福建銀行智能外呼系統價格 地圖標注專員怎么樣 房產中介用的是什么外呼系統

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

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

工廠的工作

先建立一個工廠的接口

Factory.php

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

start方法返回一個產品,該方法調用createProduct方法完成產生產品的操作.所以createProduct的具體實現要構建并返回一個按Product接口實現的產品對象.

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

Product.php

?php
//產品接口
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();
 }
}

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

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

下面的是兩個產品的實現

TextProduct.php

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

PhotoProduct.php

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

這兩個產品實現了Product接口中的抽象方法getProperties(),

客戶(Client)

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

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

運行Client.php, 得到下面的結果

這里是圖像產品
這里是文本產品

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

調整產品

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

如果現在需求變化了, 需要對圖像產品做出修改, 只需要修改相應的產品PhotoProduct的getProperties方法即可

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

增加新產品和參數化請求

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

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

一個工廠多個產品(參數化工廠方法)

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

新工廠接口

Factory.php

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

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

工廠具體實現

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

CommonFactory.php

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

這個類調用Product的方法getProperties將產品返回給客戶.

新產品

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

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

例如, 現在有一個鋼筆產品PenProduct

PenProduct.php

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

客戶Clent(有參數)

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

運行后輸出

鋼筆產品

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

總結:

產品改變: 接口不變

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

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

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

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

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

巨人網絡通訊聲明:本文標題《PHP設計模式之工廠模式定義與用法詳解》,本文關鍵詞  PHP,設計模式,之,工廠,模式,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP設計模式之工廠模式定義與用法詳解》相關的同類信息!
  • 本頁收集關于PHP設計模式之工廠模式定義與用法詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    国产精品亚洲一区二区三区妖精| 国产三级av在线播放| 亚洲成人生活片| 久久久电影一区二区三区| 蜜桃av噜噜一区| 国产精品无码专区| 日韩午夜精品电影| 日韩精品乱码免费| 日韩免费高清一区二区| 91精选在线观看| 日韩精品电影在线| 星空大象在线观看免费播放| 欧美日韩综合在线| 亚洲综合色噜噜狠狠| av地址在线观看| 欧美性大战xxxxx久久久| 亚洲另类在线一区| 97免费公开视频| 欧美日韩精品一区二区三区| 亚洲丶国产丶欧美一区二区三区| 极品白嫩的小少妇| 欧美一区二区三区爱爱| 日本成人在线网站| 加勒比一区二区| 久久午夜羞羞影院免费观看| 黄色日韩网站视频| 北条麻妃在线观看视频| 成人免费在线观看入口| 久久aaaa片一区二区| 欧美日韩久久久一区| 日韩中文字幕区一区有砖一区| 性久久久久久久久久久| 欧美精品一区二区三区蜜桃| 国产在线国偷精品产拍免费yy| 国产精品一区二区亚洲| 亚洲人妖av一区二区| 日本少妇一级片| 日韩一级完整毛片| 国产综合久久久久影院| 三级黄色录像视频| 亚洲欧美aⅴ...| 波多野结衣加勒比| 2023国产精品自拍| 丁香六月综合激情| 欧美日韩的一区二区| 奇米影视在线99精品| 国产精品久久久免费看| 日本黄色www| 亚洲人成影院在线观看| 性活交片大全免费看| 欧美mv日韩mv亚洲| 国产成人精品亚洲777人妖| 日本久久一区二区三区| 亚洲福利一二三区| 中文字幕网站在线观看| 亚洲欧美一区二区在线观看| jjzz黄色片| 337p日本欧洲亚洲大胆精品| www.欧美日韩| 欧美一级免费大片| 国产伦精品一区二区三区免费| 色老头久久综合| 午夜av电影一区| 91视频最新网址| 午夜国产不卡在线观看视频| 潮喷失禁大喷水aⅴ无码| 一区二区三区四区视频精品免费| 国产毛片久久久久久久| 亚洲欧美另类在线| 欧美波霸videosex极品| 亚洲最大成人网4388xx| 超薄肉色丝袜一二三| 樱桃视频在线观看一区| 丁香花五月婷婷| 一级日本不卡的影视| 欧美激情视频二区| 亚洲午夜av在线| 欧美一区免费观看| 蜜臀精品一区二区三区在线观看 | 91成人在线精品| 麻豆国产精品官网| 欧美午夜一区二区三区| 韩日精品视频一区| 在线成人免费视频| 成人动漫中文字幕| 久久亚洲一区二区三区明星换脸 | 日本一区二区免费在线| 国产白袜脚足j棉袜在线观看| 国产精品青草综合久久久久99| 欧美做受喷浆在线观看| 亚洲精品成人少妇| 国产精品suv一区二区88| 视频一区欧美精品| 日本高清不卡一区| 国产成人亚洲综合a∨猫咪| 日韩视频在线一区二区| 下面一进一出好爽视频| 中文字幕在线播放不卡一区| 天堂久久精品忘忧草| 午夜精品福利一区二区三区av| 男人晚上看的视频| 美女视频黄a大片欧美| 欧美日韩国产在线观看| a在线欧美一区| 国产亚洲精品福利| free性中国hd国语露脸| 亚洲一区二区三区激情| 一本大道av一区二区在线播放| 国产一区二区久久| 欧美第一区第二区| 午夜男人的天堂| 伊人夜夜躁av伊人久久| 91视频免费在线看| 国产.欧美.日韩| 国产视频一区在线播放| 蜜桃传媒一区二区亚洲| 日本麻豆一区二区三区视频| 91麻豆精品国产91久久久资源速度| 一起草最新网址| 亚洲人成精品久久久久久| 伊人久久久久久久久久久久久久| 韩国v欧美v亚洲v日本v| 精品国产一区久久| 国产全是老熟女太爽了| 秋霞午夜鲁丝一区二区老狼| 制服丝袜国产精品| 国产精品果冻传媒| 亚洲一区二区精品3399| 欧美午夜寂寞影院| 在线中文字日产幕| 婷婷综合在线观看| 欧美一区二区免费观在线| 美女黄色一级视频| 亚洲h动漫在线| 91精品国产欧美一区二区成人 | 亚洲午夜久久久| 欧美色窝79yyyycom| 亚洲熟女乱综合一区二区| 亚洲自拍都市欧美小说| 欧美剧在线免费观看网站| 国产婷婷在线观看| 天堂资源在线中文精品| 日韩欧美激情四射| 成人黄色免费网址| 国产乱码精品一品二品| 国产精品久久久久久一区二区三区 | 免费高清视频在线观看| 亚洲一卡二卡三卡四卡五卡| 欧美精品1区2区3区| 真人bbbbbbbbb毛片| 国内精品伊人久久久久av一坑| 久久久久久久久久久久电影| 91狠狠综合久久久| 91蝌蚪porny成人天涯| 亚洲va在线va天堂| 日韩欧美国产三级| 国产精品suv一区二区88| 99视频热这里只有精品免费| 无码人中文字幕| 欧美日韩国产成人在线91| 国产三级精品三级| 精品国产视频在线观看| 91免费观看视频| 热久久免费视频| 久久精品夜色噜噜亚洲a∨| 国产suv一区二区三区| 日本女人黄色片| 日韩av一区二区三区四区| 久久新电视剧免费观看| 91精品国自产在线偷拍蜜桃| 动漫av在线免费观看| 美女视频一区二区三区| 中文av一区二区| 在线日韩一区二区| 最近中文字幕无免费| 国产一区二区精品久久| 亚洲精品国产一区二区三区四区在线| 777亚洲妇女| 天天操天天摸天天舔| 中文写幕一区二区三区免费观成熟| 日韩电影在线一区二区| 亚洲国产精品传媒在线观看| 欧美色综合久久| 手机看片国产日韩| 亚洲美女精品视频| 国产一级精品在线| 亚洲一区二区不卡免费| 国产丝袜美腿一区二区三区| 欧美片网站yy| www.xx日本| 久久福利小视频| 国产a级毛片一区| 天天亚洲美女在线视频| 国产精品美女www爽爽爽| 91 com成人网| 欧美特级一级片| 国产激情在线免费观看| 91视视频在线观看入口直接观看www | 中文字幕va一区二区三区| 精品视频一区三区九区|