咨詢電(diàn)話(huà):023-88959644    24小(xiǎo)時(shí)服務熱線:400-023-8809
NEWS CENTER ·
新聞動态
關注中技(jì)互聯 關注前沿

PHP 工廠模式

發表日期:2016-04-27    文章編輯:重慶網站(zhàn)建設小(xiǎo)編    浏覽次數(shù):332    标簽:

  可(kě)能一直都以為(wèi)設計(jì)模式隻是為(wèi)Java架構師(shī)準備的,實際上(shàng),設計(jì)模式對于每個(gè)人(rén)都非常有(yǒu)用。為(wèi)什麽說它們在PHP應用程序中也非常有(yǒu)用?
  接下來(lái)讓我來(lái)解釋這些(xiē)問題。
  設計(jì)模式不僅代表着更快開(kāi)發健壯軟件的有(yǒu)用方法,而且還(hái)提供了以友(yǒu)好的術(shù)語封裝大(dà)型理(lǐ)念的方法。用較小(xiǎo)的示例展示設計(jì)模式的價值與功用是非常困難的。這往往有(yǒu)些(xiē)大(dà)材小(xiǎo)用的意味,因為(wèi)模式實際上(shàng)是在大(dà)型代碼庫中發揮作(zuò)用的。
  既然已經了解了設計(jì)模式以及它們的有(yǒu)用之處,現在我們來(lái)看看PHP5的幾種常用模式。
  一、工廠模式(Factory Pattern)
  工廠模式主要是為(wèi)創建對象提供過渡接口,以便将創建對象的具體(tǐ)過程屏蔽隔離起來(lái),達到提高(gāo)靈活性的目的。(JAVA中工廠模式分為(wèi):簡單工廠模式、工廠方法模式、抽象工廠模式)
  工廠就是負責生(shēng)成對象的類或方法。工廠模式解決了當代碼關注于抽象類型時(shí)如何創建對象實例的問題。
  在最初的設計(jì)模式一書(shū)中,許多(duō)設計(jì)模式都鼓勵使用松散耦合。如何理(lǐ)解這個(gè)概念?在項目開(kāi)發中更改一個(gè)代碼片段時(shí),就會(huì)發生(shēng)問 題,而且往往認為(wèi)完全不相關的部分也可(kě)能出現級聯破壞。該問題在于緊密耦合。如果類之間(jiān)有(yǒu)非常強的依賴性,那(nà)麽這樣的系統就很(hěn)難維護,因為(wèi)系統裏的一個(gè)改 動會(huì)引起一連串的相關改動。所以我們需要一組模式使這些(xiē)類之間(jiān)能夠相互通(tōng)信,但(dàn)不希望它們緊密綁定在一起,以避免出現聯鎖反應(嚴格意義上(shàng)講是叫解耦)。
  在大(dà)型系統中,許多(duō)代碼依賴于少(shǎo)數(shù)幾個(gè)關鍵類。需要更改這些(xiē)類時(shí),可(kě)能會(huì)出現困難。例如,假設您有(yǒu)一個(gè)從文件讀取的User類,您希望将其更改為(wèi)從數(shù)據庫讀取的其他類,但(dàn)是,所有(yǒu)的代碼都引用從文件讀取的原始類,這時(shí)候,使用工廠模式會(huì)很(hěn)方便。
 
舉例說明(míng):
<?php
   abstract class IUser { //抽象産品角色
       abstract function getName();
   }
   class User extends IUser { //具體(tǐ)産品角色
       public function getName() {
           return 'Jack';  
       }
   }
   class UserFactory { //工廠類角色
       static public function create() {
           return new User(); //返回實例
       }
   }
   $uo = UserFactory::create();
   echo $uo->getName();
?>
  在簡單工廠模式中,一個(gè)工廠類處于對産品實例化調用的中心位置上(shàng),它決定哪一個(gè)産品類應當被實例化,如同一個(gè)交通(tōng)警察站(zhàn)在來(lái)往的車(chē)輛(liàng)流中,決定放行(xíng)哪一個(gè)方向的車(chē)輛(liàng)前行(xíng)。
 
工廠模式的三種角色:
  1.工廠角色(Creator):這是本模式的核心,它負責實現創建所有(yǒu)實例的內(nèi)部邏輯。工廠類可(kě)以被外界直接調用,創建所需的産品對象。
  2.抽象産品角色(Product):工廠模式所創建的所有(yǒu)對象的父類。它負責描述所有(yǒu)實例所共有(yǒu)的公共接口。(一般由接口或抽象類來(lái)實現)。
  3.具體(tǐ)産品角色(Concrete Product):是工廠模式創建的目标,所有(yǒu)創建的對象都是充當這個(gè)角色的某個(gè)具體(tǐ)類的實例。(由一個(gè)具體(tǐ)類實現)
 
工廠模式的優缺點:
優點:
  1. 簡單實用
  2. 利于軟件體(tǐ)系結構優化
缺點:
  1. 違反高(gāo)內(nèi)聚責任分配原則
  2. 模塊功能容易蔓延,不利于系統維護
  有(yǒu)時(shí)此類模式在規模較小(xiǎo)的環境中似乎有(yǒu)點大(dà)材小(xiǎo)用,不過,最好還(hái)是學習這種紮實的編碼形式,以便應用于任意規模的項目中。
  本文由重慶網站(zhàn)建設-中技(jì)互聯:www.zjcoo.com
如沒特殊注明(míng),文章均為(wèi)中技(jì)互聯原創,轉載請(qǐng)注明(míng)來(lái)自www.zjcoo.com
相關新聞

CopyrightZJCOO technology Co., LTD. All Rights Reserved.    

渝ICP 備11003429号

  • qq客服
  • 公衆号
  • 手機版
  • 新浪微博