日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
PHP設(shè)計(jì)模式漫談之工廠模式

在《你是否了解PHP設(shè)計(jì)模式》一文中,我們?cè)?jiǎn)單介紹過工廠模式,今天我們?cè)賮碓敿?xì)看看PHP開發(fā)中工廠模式的應(yīng)用場(chǎng)景。

札達(dá)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

欲了解更多關(guān)于PHP設(shè)計(jì)模式的內(nèi)容,歡迎訪問:PHP設(shè)計(jì)模式漫談

最初在設(shè)計(jì)模式一書中,許多設(shè)計(jì)模式都鼓勵(lì)使用松散耦合。要理解這個(gè)概念,讓我們***談一下許多開發(fā)人員從事大型系統(tǒng)的艱苦歷程。在更改一個(gè)代碼片段時(shí),就會(huì)發(fā)生問題,系統(tǒng)其他部分 —— 您曾認(rèn)為完全不相關(guān)的部分中也有可能出現(xiàn)級(jí)聯(lián)破壞。

該問題在于緊密耦合 。系統(tǒng)某個(gè)部分中的函數(shù)和類嚴(yán)重依賴于系統(tǒng)的其他部分中函數(shù)和類的行為和結(jié)構(gòu)。您需要一組模式,使這些類能夠相互通信,但不希望將它們緊密綁定在一起,以避免出現(xiàn)聯(lián)鎖。

在大型系統(tǒng)中,許多代碼依賴于少數(shù)幾個(gè)關(guān)鍵類。需要更改這些類時(shí),可能會(huì)出現(xiàn)困難。例如,假設(shè)您有一個(gè)從文件讀取的 User 類。您希望將其更改為從數(shù)據(jù)庫(kù)讀取的其他類,但是,所有的代碼都引用從文件讀取的原始類。這時(shí)候,使用工廠模式會(huì)很方便。

工廠模式是一種類,它具有為您創(chuàng)建對(duì)象的某些方法。您可以使用工廠類創(chuàng)建對(duì)象,而不直接使用 new。這樣,如果您想要更改所創(chuàng)建的對(duì)象類型,只需更改該工廠即可。使用該工廠的所有代碼會(huì)自動(dòng)更改。

示例1:顯示工廠類的一個(gè)示列。等式的服務(wù)器端包括兩個(gè)部分:數(shù)據(jù)庫(kù)和一組 PHP 頁(yè)面,這些頁(yè)面允許您添加反饋、請(qǐng)求反饋列表并獲取與特定反饋相關(guān)的文章。

 
 
 
 
  1. interface IUser  
  2. {  
  3.   function getName();  
  4. }  
  5.  
  6. class User implements IUser  
  7. {  
  8.   public function __construct( $id ) { }  
  9.  
  10.   public function getName()  
  11.   {  
  12.     return "Jack";  
  13.   }  
  14. }  
  15.  
  16. class UserFactory  
  17. {  
  18.   public static function Create( $id )  
  19.   {  
  20.     return new User( $id );  
  21.   }  
  22. }  
  23.  
  24. $uo = UserFactory::Create( 1 );  
  25. echo( $uo->getName()."\n" );  
  26. ?> 

IUser接口定義用戶對(duì)象應(yīng)執(zhí)行什么操作。IUser 的實(shí)現(xiàn)稱為 User,UserFactory 工廠類則創(chuàng)建 IUser 對(duì)象。此關(guān)系可以用圖1中的UML 表示。

圖 1. 工廠類及其相關(guān) IUser 接口和用戶類

如果您使用 php 解釋器在命令行上運(yùn)行此代碼,將得到如下結(jié)果:

 
 
 
 
  1. % php factory1.php   
  2. Jack  
  3. %  

測(cè)試代碼會(huì)向工廠請(qǐng)求 User 對(duì)象,并輸出 getName 方法的結(jié)果。

有一種工廠模式的變體使用工廠方法。類中的這些公共靜態(tài)方法構(gòu)造該類型的對(duì)象。如果創(chuàng)建此類型的對(duì)象非常重要,此方法非常有用。例如,假設(shè)您需要先創(chuàng)建對(duì)象,然后設(shè)置許多屬性。此版本的工廠模式會(huì)將該進(jìn)程封裝在單個(gè)位置中,這樣,不用復(fù)制復(fù)雜的初始化代碼,也不必將復(fù)制好的代碼在在代碼庫(kù)中到處粘貼。

示例2 顯示使用工廠方法的一個(gè)示例。

 
 
 
 
  1. interface IUser  
  2. {  
  3.   function getName();  
  4. }  
  5.  
  6. class User implements IUser  
  7. {  
  8.   public static function Load( $id )   
  9.   {  
  10.         return new User( $id );  
  11.   }  
  12.  
  13.   public static function Create( )   
  14.   {  
  15.         return new User( null );  
  16.   }  
  17.  
  18.   public function __construct( $id ) { }  
  19.  
  20.   public function getName()  
  21.   {  
  22.     return "Jack";  
  23.   }  
  24. }  
  25.  
  26. $uo = User::Load( 1 );  
  27. echo( $uo->getName()."\n" );  
  28. ?> 

這段代碼要簡(jiǎn)單得多。它僅有一個(gè)接口 IUser 和一個(gè)實(shí)現(xiàn)此接口的 User 類。User 類有兩個(gè)創(chuàng)建對(duì)象的靜態(tài)方法。此關(guān)系可用圖 2 中的 UML 表示。

 圖 2. IUser 接口和帶有工廠方法的 user 類

在命令行中運(yùn)行腳本產(chǎn)生的結(jié)果與清單 1 的結(jié)果相同,如下所示:

 
 
 
 
  1. % php factory2.php   
  2. Jack  

如上所述,有時(shí)此類模式在規(guī)模較小的環(huán)境中似乎有些大材小用。不過,***還是學(xué)習(xí)這種扎實(shí)的編碼形式,以便應(yīng)用于任意規(guī)模的項(xiàng)目中。

【編輯推薦】

  1. PHP設(shè)計(jì)模式漫談之代理模式
  2. PHP設(shè)計(jì)模式漫談之責(zé)任鏈模式
  3. PHP設(shè)計(jì)模式漫談之結(jié)構(gòu)模式
  4. PHP設(shè)計(jì)模式漫談之命令模式

新聞名稱:PHP設(shè)計(jì)模式漫談之工廠模式
文章鏈接:http://m.5511xx.com/article/dhdpcdc.html