亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

實例講解PHP設計模式編程中的簡單工廠模式

2024-05-04 23:43:22
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP設計模式編程中的簡單工廠模式,舉了一個水果銷售和一個計算器設計的例子,需要的朋友可以參考下
 

簡單工廠模式是類的創建模式,又叫做靜態工廠方法(Static Factory Method)模式。簡單工廠模式是由一個工廠對象決定創建出那一種產品類的實例。

1.工廠模式的幾種形態
工廠模式專門負責將大量有共同接口的類實例化。工廠模式可以動態決定將哪一個類實例化,不必事先知道每次要實例化哪一個類。工廠模式有以下幾種形態:
(1)簡單工廠(Simple Factory)模式,又稱靜態工廠方法模式(Static Factory Method Pattern)。
(2)工廠方法(Factory Method)模式,又稱多態性工廠(Polymorphic Factory)模式或虛擬構造子(Virtual Constructor)模式;
(3)抽象工廠(Abstract Factory)模式,又稱工具箱(Kit 或Toolkit)模式。下面就是簡單工廠模式的簡略類圖。

 

簡單工廠模式,或稱靜態工廠方法模式,是不同的工廠方法模式的一個特殊實現。在其他文獻中,簡單工廠往往作為普通工廠模式的一個特例討論。
學習簡單工廠模式是對學習工廠方法模式的一個很好的準備,也是對學習其他模式,特別是單例模式和多例模式的一個很好的準備。

2 .簡單工廠模式的引進

比如說有一個農場公司,專門向市場銷售各類水果。在這個系統里需要描述下列的水果:
葡萄 Grape
草莓 Strawberry
蘋果 Apple
水果與其他的植物有很大的不同,就是水果最終是可以采摘食用的。那么一個自然的作法就是建立一個各種水果都適用的接口,以便與農場里的其他植物區分開。如下圖所示。

水果接口規定出所有的水果必須實現的接口,包括任何水果類必須具備的方法:種植plant(),生長grow()以及收獲harvest()。接口Fruit 的類圖如下所示。

這個水果接口的源代碼如下所示。
代碼清單1:接口Fruit 的源代碼

interface Fruit{public function grow();public function harvest();public function plant();}

Apple 類是水果類的一種,因此它實現了水果接口所聲明的所有方法。另外,由于蘋果是多年生植物,因此多出一個treeAge 性質,描述蘋果樹的樹齡。下面是這個蘋果類的源代碼。
代碼清單2:類Apple 的源代碼

class Apple implements Fruit{private $_treeAge;public function grow(){echo "Apple is growing.";}public function harvest(){echo "Apple has been harvested.";}public function plant(){echo "Apple has been planted.";}public function getTreeAge(){return $this->_treeAge;}public function setTreeAge($treeAge){$this->_treeAge = (int) $treeAge;}}

同樣,Grape 類是水果類的一種,也實現了Fruit 接口所聲明的所有的方法。但由于葡萄分有籽和無籽兩種,因此,比通常的水果多出一個seedless 性質,如下圖所示。

葡萄類的源代碼如下所示。可以看出,Grape 類同樣實現了水果接口,從而是水果類型的一種子類型。
代碼清單3:類Grape 的源代碼

class Grape implements Fruit{private $seedless;public function grow(){echo "Grape is growing.";}public function harvest(){echo "Grape has been harvested.";}public function plant(){echo "Grape has been planted.";}public function getSeedless(){return $this->seedless;}public function setSeedless($seedless){$this->seedless = (boolean) $seedless;}}

Strawberry 類實現了Fruit 接口,因此,也是水果類型的子類型,其源代碼如下所示。
代碼清單4:類Strawberry 的源代碼

class Strawberry implements Fruit{public function grow(){echo "Strawberry is growing.";}public function harvest(){echo "Strawberry has been harvested.";}public function plant(){echo "Strawberry has been planted.";}}

農場的園丁也是系統的一部分,自然要由一個合適的類來代表。這個類就是FruitGardener 類,其結構由下面的類圖描述。

FruitGardener 類會根據客戶端的要求,創建出不同的水果對象,比如蘋果(Apple),葡萄(Grape)或草莓(Strawberry)的實例。而如果接到不合法的要求,FruitGardener 類會拋出BadFruitException 異常。
園丁類的源代碼如下所示。
代碼清單5:FruitGardener 類的源代碼

class FruitGardener{public static function factory($which){$which = strtolower($which);if ($which == 'apple') {return new Apple();} elseif ($which == 'strawberry') {return new Strawberry();} elseif ($which == 'grape') {return new Grape();} else {throw new BadFruitException('Bad fruit request');}}}

可以看出,園丁類提供了一個靜態工廠方法。在客戶端的調用下,這個方法創建客戶端所需要的水果對象。如果客戶端的請求是系統所不支持的,工廠方法就會拋出一個BadFruitException 異常。這個異常類的源代碼如下所示。
代碼清單6:BadFruitException 類的源代碼

class BadFruitException extends Exception{}

在使用時,客戶端只需調用FruitGardener 的靜態方法factory()即可。請見下面的示意
性客戶端源代碼。
代碼清單7:怎樣使用異常類BadFruitException

try {FruitGardener::factory('apple');FruitGardener::factory('grape');FruitGardener::factory('strawberry');//...} catch (BadFruitException $e) {//...}

這樣,農場一定會百果豐收啦!

3.使用簡單工廠模式設計一個“面向對象的”計算器

/** * 面向對象計算器 * 思路: * 1、面向對象的基本,封裝、繼承、多太 * 2、父類公用類 * 3、各種運算類 */ /** * 基類,運算類 * 只提供基本數據,不參與運算 */ class Operation {   // 第一個數 public $first_num = 0;   // 第二個數 public $second_num = 0;   /**  * 獲取結果,其他類覆蓋此方法  * @return double $result  */ public function getResult() {  $result = 0.00;     return $result; }} /** * 加法類 */class OperationAdd extends Operation { /**  * 覆蓋父類,實現加法算法  */ public function getResult() {  $result = 0;  return $this->first_num + $this->second_num; }} /** * 減法類 * */class OperationSub extends Operation { /**  * 覆蓋父類,實現加法算法  */ public function getResult() {  $result = 0;  return $this->first_num - $this->second_num; }} /** * 乘法類 * */class OperationMul extends Operation { /**  * 覆蓋父類,實現加法算法  */ public function getResult() {  $result = 0;  return $this->first_num * $this->second_num; }} /** * 除類 * */class OperationDiv extends Operation { /**  * 覆蓋父類,實現加法算法  */ public function getResult() {  $result = 0;     if ($this->second_num == 0) {   throw new Exception('除法操作第二個參數不能為零!');   return 0;  }     return $this->first_num / $this->second_num; }} /** * 工廠類 */class OperationFactory { /**  * 工廠函數  * @param string $operation  * @return object  */ public function createOperation($operation) {  $oper = null;     switch($operation) {   case '+':    $oper = new OperationAdd();    break;   case '-':    $oper = new OperationSub();    break;   case '*':    $oper = new OperationMul();    break;   case '/':    $oper = new OperationDiv();    break;   default:    return 0;  }  return $oper; }}  $operation = new OperationFactory();$oper = $operation->createOperation('/'); $oper->first_num = 10;$oper->second_num = 20;var_dump($oper->getResult());


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品免费视频xxxx| 国产精品福利网站| 亚洲人线精品午夜| 亚洲肉体裸体xxxx137| 亚洲第一页在线| 成人午夜在线观看| 亚洲精品国精品久久99热| 日韩在线视频观看正片免费网站| 91美女福利视频高清| 一本色道久久88综合亚洲精品ⅰ| 欧美夜福利tv在线| 亚洲人免费视频| 亚洲视频欧美视频| 精品性高朝久久久久久久| 欧美成人在线免费| 欧美精品激情在线观看| 欧美成人在线影院| 奇门遁甲1982国语版免费观看高清| 久久69精品久久久久久国产越南| 亚洲韩国日本中文字幕| 欧美高清在线观看| 久久精品人人做人人爽| 亚洲精品视频中文字幕| 亚洲综合最新在线| 中文字幕精品一区二区精品| 欧洲成人免费视频| 久久香蕉频线观| 精品中文视频在线| 精品久久久久久久久久久| 日韩在线观看你懂的| 91精品在线观| 日韩视频在线观看免费| 亚洲成人a**站| 国产精品日韩久久久久| 51久久精品夜色国产麻豆| 亚洲成成品网站| 亚洲高清在线观看| 欧美午夜宅男影院在线观看| 国产在线98福利播放视频| 一区二区三区 在线观看视| 欧美精品第一页在线播放| 上原亚衣av一区二区三区| 国产精品久久久久久久久久东京| 久久香蕉频线观| 国模精品一区二区三区色天香| 日韩精品福利在线| 久久久黄色av| 日本亚洲欧洲色| 欧美激情一区二区三区高清视频| 黑人巨大精品欧美一区二区| 日韩福利视频在线观看| 国产专区欧美专区| 亚洲一区二区三| 欧美激情欧美激情| 日日噜噜噜夜夜爽亚洲精品| 亚洲国产精品va在线看黑人| 欧美日韩在线视频一区| 中文字幕日韩在线观看| 热久久美女精品天天吊色| 欧美限制级电影在线观看| 91精品国产777在线观看| 91精品久久久久久久| 91tv亚洲精品香蕉国产一区7ujn| 国产日本欧美一区二区三区| 青青久久aⅴ北条麻妃| 亚洲va国产va天堂va久久| 久久国产一区二区三区| 91久久久久久久久久久久久| 2025国产精品视频| 一区二区亚洲欧洲国产日韩| 日韩一区视频在线| 亚洲自拍偷拍色图| 美女久久久久久久| 精品中文字幕乱| 欧美一级淫片videoshd| 欧美亚洲成人精品| 欧美精品一区二区三区国产精品| 国产精品爱啪在线线免费观看| 亚洲精品999| 国产精品白丝jk喷水视频一区| 国产精品亚洲美女av网站| 欧美日韩在线第一页| 国产成人在线一区| www.国产精品一二区| 欧美日韩成人在线播放| 久久久精品免费视频| 91香蕉嫩草神马影院在线观看| 亚洲欧美一区二区精品久久久| 久久天天躁日日躁| 91精品国产高清久久久久久91| 久久亚洲精品毛片| 免费不卡欧美自拍视频| 97视频在线观看免费高清完整版在线观看| 亚洲欧美在线播放| 成人黄色免费片| 亚洲欧美www| 欧美理论电影在线播放| 久久精品视频va| 一区二区在线视频播放| 久久男人av资源网站| 久久久亚洲天堂| 国产日韩在线观看av| 91中文精品字幕在线视频| 中文字幕久精品免费视频| 色婷婷成人综合| 亚洲片在线观看| 国产精品人成电影在线观看| 亚洲新声在线观看| 91wwwcom在线观看| 日韩精品中文字幕视频在线| 国产精品久久久久一区二区| 欧美性一区二区三区| 国产综合久久久久久| 午夜精品久久久久久99热| 国产成人综合亚洲| 美日韩精品免费观看视频| 欧美日韩国产丝袜美女| 中文字幕欧美日韩va免费视频| 日韩高清欧美高清| 国产亚洲在线播放| 国产偷国产偷亚洲清高网站| 亚洲性夜色噜噜噜7777| 亚洲免费电影一区| www.亚洲人.com| 亚洲精品少妇网址| 国产精品久久一区| 亚洲人成电影网站色| 国产午夜精品理论片a级探花| 欧美激情久久久久| 国内伊人久久久久久网站视频| 中文字幕日韩欧美在线视频| 国产网站欧美日韩免费精品在线观看| 久久福利视频网| 亚洲最大在线视频| xxxxx成人.com| 久久免费视频这里只有精品| 久久久久久国产精品| xxx欧美精品| 国产精品av免费在线观看| 精品国产乱码久久久久久虫虫漫画| 国产日韩欧美在线看| 国产精品高精视频免费| 青青精品视频播放| 精品中文字幕视频| 国产第一区电影| 亚洲成人免费网站| 欧美午夜激情视频| 97在线视频免费| 国产精品福利片| 亚洲精品国产精品久久清纯直播| 欧美激情精品久久久久久变态| 欧美成人精品一区| 97精品一区二区三区| 久久大大胆人体| 久久国产一区二区三区| 欧美成人亚洲成人日韩成人| 国产成人精品av在线| 久久久精品日本| 日韩欧亚中文在线| 国产亚洲精品久久久久久777| 最近中文字幕日韩精品| 国产日韩av在线播放| 午夜精品久久久久久久99热| 成人做爰www免费看视频网站|