那麼何為工廠模式?
從名字來看,似乎看不出什麼端倪。工廠模式,和生產有關?還是和生產流程
子了,所謂工廠模式還真和生產有關。生產什麼呢?生產出來的是乙個例項物件。
通過什麼裝置生產?通過乙個工廠類生產。怎麼生產呢?工廠類呼叫自身靜態方法
來生產物件例項。
工廠模式有乙個關鍵的構造,根據一般原則命名為factory的靜態方法,然
而這只是一種原則,雖然工廠方法可以任意命名這個靜態還可以接受任意資料
的引數,必須返回乙個物件。
為什麼要用工廠模式?
很多沒接觸過工廠模式的人會不禁問,為啥我要費那麼大的勁兒去構造工廠類
單的問題。如果專案中,我們通過乙個類建立物件。在快完成或者已經完成,要擴
展功能的時候,發現原來的類類名不是很合適或者發現類需要新增構造函式引數才
能實現功能擴充套件。我靠!我都通過這個類建立了一大堆物件例項了啊,難道我還要
乙個乙個去改不成?我們現在才感受到了「高內聚低耦合」的博大精深。沒問題,工
廠方法可以解決這個問題。
再考慮一下,我要連線資料庫,在php裡面就有好幾種方法,mysql擴充套件
情況而定嘍。既然你們都是連線資料庫的操作,你們就應該擁有相同的功能,建立
連線,查詢,斷開連線...(此處顯示介面的重要性)。總而言之,這幾種方法應
該「團結一致,一致對外」。如何實現呢?利用工廠模式。
工廠模式如何實現?
相對於單例模式,上面我們提供了足夠的資訊,工廠類,工廠類裡面的靜態方
二個問題,根據工廠類靜態方法的引數,我們簡單做個判斷就好了。管你用
if..else..還是switch..case..,能快速高效完成判斷該建立哪個類的工作
就好了。最後,一定要記得,工廠類靜態方法返回乙個物件。不是兩個,更不是三
個。 基本的工廠類:
複製**
//要建立物件例項的類
class
myobject
//工廠類
class
myfactory
}$instance=myfactory::factory();
複製**
乙個稍微複雜的工廠模式:
複製**
<?php
inte***ce
transport
class
bu******ments
transport
}class
carimplements
transport
}class
bike
implements
transport
}class
transfactory
}}$transport=transfactory::factory('car');
$transport->go();
複製**
需要工廠靜態方法為factory()的時候,千萬別再傻乎乎的把工廠類命名為
factory了。為啥啊?別忘了同名建構函式的事兒啊~
php設計模式之工廠模式
一直都對php的設計模式有著一種特殊的 情結 從最開始接觸到的單例模式,到經典的mvc設計模式,每次的接觸都讓我為之驚奇。買了本php設計模式在家看,發現,都是專有名詞,再加上太專業的術語,讓我沒有看下去的勇氣。無意之中逛論壇,發現乙個部落格,關於php的五種設計模式,其中就有工廠模式。看完後,第一...
php設計模式之工廠模式
工廠模式的最大優點在於建立物件上面,就是把建立物件的過程封裝起來,這樣隨時可以產生乙個新的物件。減少 進行複製粘帖,耦合關係重,牽一發動其他部分 通俗的說,以前建立乙個物件要使用new 現在把這個過程封裝起來了。假設不使用工廠模式 那麼很多地方呼叫類a 就會這樣子建立乙個例項 new a 假設某天需...
php設計模式之工廠模式
在 1994 年,由 erich gamma richard helm ralph johnson 和 john vlissides 四人合著出版了一本名為 design patterns elements of reusable object oriented software 中文譯名 設計模式...