php模式設計之 原廠模式,php模式設計工廠
承接上篇php模式設計之 單例模式,(雖然好像關係不大)。今天講述第二種基礎的模式設計——原廠模式。
那麼何為原廠模式?
從名字來看,似乎看不出什麼端倪。原廠模式,和生產有關?還是和生產流程有關?難道還和工廠領導有關?和領導秘書有關?秘書... 好了不賣關子了,所謂原廠模式還真和生產有關。生產什麼呢?生產出來的是一個執行個體對象。通過什麼裝置生產?通過一個工廠類生產。怎麼生產呢?工廠類調用自身靜態方法來生產對象執行個體。
原廠模式有一個關鍵的構造,根據一般原則命名為Factory的靜態方法,然而這隻是一種原則,雖然Factory 方法可以任意命名這個靜態還可以接受任意資料的參數,必須返回一個對象。
為什麼要是用原廠模式?
很多沒接觸過原廠模式的人會不禁問,為啥我要費那麼大的勁兒去構造工廠類去建立對象呢?不去套用那些易維護,可擴充之類的話,我們可以考慮這樣一個簡單的問題。如果項目中,我們通過一個類建立對象。在快完成或者已經完成,要擴充功能的時候,發現原來的類類名不是很合適或者發現類需要添加建構函式參數才能實現功能擴充。我靠!我都通過這個類建立了一大堆對象執行個體了啊,難道我還要一個一個去改不成?我們現在才感受到了“高內聚低耦合”的博大精深。沒問題,Factory 方法可以解決這個問題。
再考慮一下,我要串連資料庫,在php裡面就有好幾種方法,mysql擴充,mysqli擴充,PDO擴充。我就是想要一個對象用來以後的操作,具體要哪個,視情況而定嘍。既然你們都是串連資料庫的操作,你們就應該擁有相同的功能,建立串連,查詢,中斷連線...(此處顯示介面的重要性)。總而言之,這幾種方法應該“團結一致,一致對外”。如何?呢?利用原廠模式。
原廠模式如何??
相對於單例模式,上面我們提供了足夠的資訊,工廠類,工廠類裡面的靜態方法。靜態方法裡面new一下需要建立的對象執行個體就搞定了。當然至於考慮上面的第二個問題,根據工廠類靜態方法的參數,我們簡單做個判斷就好了。管你用if..else..還是switch..case..,能快速高效完成判斷該建立哪個類的工作就好了。最後,一定要記得,工廠類靜態方法返回一個對象。不是兩個,更不是三個。
基本的工廠類:
//要建立對象執行個體的類class MyObject{ } //工廠類class MyFactory{public static function factory(){return new MyObject(): }} $instance=MyFactory::factory();
一個稍微複雜的原廠模式:
phpinterface Transport{ public function go();}class Bus implements Transport{ public function go(){ echo "bus每一站都要停"; }}class Car implements Transport{ public function go(){ echo "car跑的飛快"; }}class Bike implements Transport{ public function go(){ echo "bike比較慢"; }}class transFactory{ public static function factory($transport) { switch ($transport) { case 'bus': return new Bus(); break; case 'car': return new Car(); break; case 'bike': return new Bike(); break; } }}$transport=transFactory::factory('car');$transport->go();
需要工廠靜態方法為factory()的時候,千萬別再傻乎乎的把工廠類命名為Factory了。為啥啊?別忘了同名建構函式的事兒啊~
最後還是談點感受吧,很多新手比較眼高手低,剛剛會了if..else..,session,cookie就要來點高大上的了。與人交談動輒可擴充性,可維護性之類云云,至於執行個體的話,就會一時語塞。有時候覺得,無論自己寫代碼還是和別人學習,都處於“眾裡尋他千百度”的時候,真正踏實學習後,驀然回首,“那人卻在燈火闌珊處”,大呼:“原來這TM就是***啊”。
筆者不敢承認自己會模式設計,我也是個不足一年的初學者,分享部落格只是想記錄自己的學習曆程,能得到知道更是求之不得。如果能給別人帶來協助,那就更好啦~~~
系列文章:
php模式設計之 單例模式
php模式設計之 原廠模式
php模式設計之 註冊樹模式
http://www.bkjia.com/PHPjc/1048724.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1048724.htmlTechArticlephp模式設計之 原廠模式,php模式設計工廠 承接上篇 php模式設計之 單例模式,(雖然好像關係不大)。今天講述第二種基礎的模式設計工廠...