成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PHP設(shè)計模式漫談之工廠模式

開發(fā) 后端
PHP中的工廠模式是一種類,它具有為您創(chuàng)建對象的某些方法。您可以使用工廠類創(chuàng)建對象,而不直接使用new。

在《你是否了解PHP設(shè)計模式》一文中,我們曾簡單介紹過工廠模式,今天我們再來詳細看看PHP開發(fā)中工廠模式的應用場景。

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

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

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

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

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

示例1:顯示工廠類的一個示列。等式的服務(wù)器端包括兩個部分:數(shù)據(jù)庫和一組 PHP 頁面,這些頁面允許您添加反饋、請求反饋列表并獲取與特定反饋相關(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接口定義用戶對象應執(zhí)行什么操作。IUser 的實現(xiàn)稱為 User,UserFactory 工廠類則創(chuàng)建 IUser 對象。此關(guān)系可以用圖1中的UML 表示。


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

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

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

測試代碼會向工廠請求 User 對象,并輸出 getName 方法的結(jié)果。

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

示例2 顯示使用工廠方法的一個示例。

  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. ?> 

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


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

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

  1. % php factory2.php   
  2. Jack  

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

 

【編輯推薦】

  1. PHP設(shè)計模式漫談之代理模式
  2. PHP設(shè)計模式漫談之責任鏈模式
  3. PHP設(shè)計模式漫談之結(jié)構(gòu)模式
  4. PHP設(shè)計模式漫談之命令模式
責任編輯:佚名 來源: PHPQ
相關(guān)推薦

2010-03-25 08:52:30

PHP設(shè)計模式代理模式

2010-04-13 08:54:28

PHP設(shè)計模式命令模式

2010-04-01 09:10:03

PHP設(shè)計模式責任鏈模式

2010-04-29 08:53:11

PHP迭代器模式

2010-04-08 09:27:04

PHP設(shè)計模式結(jié)構(gòu)模式

2010-04-21 08:38:18

解釋器模式PHP設(shè)計模式

2010-05-06 08:44:37

調(diào)解者模式

2020-08-21 07:23:50

工廠模式設(shè)計

2011-11-17 16:03:05

Java工廠模式Clojure

2021-03-06 22:50:58

設(shè)計模式抽象

2009-01-15 10:55:29

JavaScript設(shè)計模式抽象工廠

2022-01-12 13:33:25

工廠模式設(shè)計

2011-07-28 09:50:58

設(shè)計模式

2019-08-16 10:46:46

JavaScript工廠模式抽象工廠模式

2022-05-09 08:04:50

工廠模式設(shè)計模式

2021-09-29 13:53:17

抽象工廠模式

2020-10-19 09:28:00

抽象工廠模式

2024-09-23 08:30:48

2020-08-11 11:20:30

Typescript設(shè)計模式

2011-07-21 14:33:02

設(shè)計模式
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品视频久久 | 中文字幕一区在线 | 久久国产精品一区二区三区 | 国产婷婷精品 | 久久精品 | av久久| 日韩一区二区三区av | 国产日韩久久久久69影院 | 一级毛片色一级 | 精品中文字幕一区 | 97精品超碰一区二区三区 | 久久久久久国产 | 国产一区不卡 | 欧美日韩在线免费观看 | 久久躁日日躁aaaaxxxx | 久草网址| 成人精品久久 | 国产精品99 | 精品久久久久久久久久久久久 | www.蜜桃av | 嫩草最新网址 | 国产精品久久久久久久久久久免费看 | 91精品国产综合久久久久 | 99热.com| 一区二区三区精品视频 | 九九综合 | 欧美一级免费看 | 欧美精品一区二区三区四区五区 | 欧美一区二区免费 | 亚洲视频免费在线观看 | 视频一区二区三区四区五区 | 日本精品视频一区二区三区四区 | 亚洲国产精品91 | 国产在线资源 | 播放一级毛片 | 国产精品久久久久av | 国产精品久久久亚洲 | 99久久精品视频免费 | 成人欧美一区二区三区黑人孕妇 | 成人免费淫片aa视频免费 | 久久亚|