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