|
本文以實(shí)例形式較為詳細(xì)的介紹了php設(shè)計(jì)模式的簡(jiǎn)單工廠模式,對(duì)于進(jìn)行php程序設(shè)計(jì)來(lái)說(shuō)有很好的借鑒作用。具體如下:
一、概念
簡(jiǎn)單工廠模式 【靜態(tài)工廠方法模式】(Static Factory Method)
是類的創(chuàng)建模式
工廠模式的幾種形態(tài):
1、簡(jiǎn)單工廠模式(Simple Factory)又叫做 靜態(tài)工廠方法模式(Static Factory Method)
2、工廠方法模式(Factory Method)又叫做 多態(tài)性工廠模式(Polymorphic Factory)
3、抽象工廠模式(Abstract Factory)又叫做 工具箱模式(ToolKit)
二、配圖分析:
三、代碼實(shí)例
該實(shí)例代碼經(jīng)過(guò)測(cè)試可以運(yùn)行,具體如下:
<?php/** * 一個(gè)事例 * * 一個(gè)農(nóng)場(chǎng),要向市場(chǎng)銷售水果 * 農(nóng)場(chǎng)里有三種水果 蘋(píng)果、葡萄 * 我們?cè)O(shè)想:1、水果有多種屬性,每個(gè)屬性都有不同,但是,他們有共同的地方 | 生長(zhǎng)、種植、收貨、吃 * 2、將來(lái)有可能會(huì)增加新的水果、我們需要定義一個(gè)接口來(lái)規(guī)范他們必須實(shí)現(xiàn)的方法 * 3、我們需要獲取某個(gè)水果的類,要從農(nóng)場(chǎng)主那里去獲取某個(gè)水果的實(shí)例,來(lái)知道如何生長(zhǎng)、種植、收貨、吃 *//** * 虛擬產(chǎn)品接口類 * 定義好需要實(shí)現(xiàn)的方法 */interface fruit{ /** * 生長(zhǎng) */ public function grow(); /** * 種植 */ public function plant(); /** * 收獲 */ public function harvest(); /** * 吃 */ public function eat(); }/** * 定義具體產(chǎn)品類 蘋(píng)果 * 首先,我們要實(shí)現(xiàn)所繼承的接口所定義的方法 * 然后定義蘋(píng)果所特有的屬性,以及方法 */class apple implements fruit{ //蘋(píng)果樹(shù)有年齡 private $treeAge; //蘋(píng)果有顏色 private $color; public function grow(){ echo "grape grow"; } public function plant(){ echo "grape plant"; } public function harvest(){ echo "grape harvest"; } public function eat(){ echo "grape eat"; } //取蘋(píng)果樹(shù)的年齡 public function getTreeAge(){ return $this->treeAge; } //設(shè)置蘋(píng)果樹(shù)的年齡 public function setTreeAge($age){ $this->treeAge = $age; return trie; }}/** * 定義具體產(chǎn)品類 葡萄 * 首先,我們要實(shí)現(xiàn)所繼承的接口所定義的方法 * 然后定義葡萄所特有的屬性,以及方法 */class grape implements fruit{ //葡萄是否有籽 private $seedLess; public function grow(){ echo "apple grow"; } public function plant(){ echo "apple plant"; } public function harvest(){ echo "apple harvest"; } public function eat(){ echo "apple eat"; } //有無(wú)籽取值 public function getSeedLess(){ return $this->seedLess; } //設(shè)置有籽無(wú)籽 public function setSeedLess($seed){ $this->seedLess = $seed; return true; }}/** *農(nóng)場(chǎng)主類 用來(lái)獲取實(shí)例化的水果 * */class farmer{ //定義個(gè)靜態(tài)工廠方法 public static function factory($fruitName){ switch ($fruitName) { case 'apple': return new apple(); break; case 'grape': return new grape(); break; default: throw new badFruitException("Error no the fruit", 1); break; } }}class badFruitException extends Exception{ public $msg; public $errType; public function __construct($msg = '' , $errType = 1){ $this->msg = $msg; $this->errType = $errType; } }/** * 獲取水果實(shí)例化的方法 */try{ $appleInstance = farmer::factory('apple'); var_dump($appleInstance);}catch(badFruitException $err){ echo $err->msg . "_______" . $err->errType;}
希望本文所述實(shí)例對(duì)大家php程序設(shè)計(jì)有所幫助。
php技術(shù):php設(shè)計(jì)模式之簡(jiǎn)單工廠模式詳解,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。