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

首頁 > 開發(fā) > PHP > 正文

實(shí)例講解PHP設(shè)計(jì)模式編程中的簡單工廠模式

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

簡單工廠模式是類的創(chuàng)建模式,又叫做靜態(tài)工廠方法(Static Factory Method)模式。簡單工廠模式是由一個(gè)工廠對象決定創(chuàng)建出那一種產(chǎn)品類的實(shí)例。

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

 

簡單工廠模式,或稱靜態(tài)工廠方法模式,是不同的工廠方法模式的一個(gè)特殊實(shí)現(xiàn)。在其他文獻(xiàn)中,簡單工廠往往作為普通工廠模式的一個(gè)特例討論。
學(xué)習(xí)簡單工廠模式是對學(xué)習(xí)工廠方法模式的一個(gè)很好的準(zhǔn)備,也是對學(xué)習(xí)其他模式,特別是單例模式和多例模式的一個(gè)很好的準(zhǔn)備。

2 .簡單工廠模式的引進(jìn)

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

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

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

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

Apple 類是水果類的一種,因此它實(shí)現(xiàn)了水果接口所聲明的所有方法。另外,由于蘋果是多年生植物,因此多出一個(gè)treeAge 性質(zhì),描述蘋果樹的樹齡。下面是這個(gè)蘋果類的源代碼。
代碼清單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 類是水果類的一種,也實(shí)現(xiàn)了Fruit 接口所聲明的所有的方法。但由于葡萄分有籽和無籽兩種,因此,比通常的水果多出一個(gè)seedless 性質(zhì),如下圖所示。

葡萄類的源代碼如下所示??梢钥闯?,Grape 類同樣實(shí)現(xiàn)了水果接口,從而是水果類型的一種子類型。
代碼清單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 類實(shí)現(xiàn)了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.";}}

農(nóng)場的園丁也是系統(tǒng)的一部分,自然要由一個(gè)合適的類來代表。這個(gè)類就是FruitGardener 類,其結(jié)構(gòu)由下面的類圖描述。

FruitGardener 類會(huì)根據(jù)客戶端的要求,創(chuàng)建出不同的水果對象,比如蘋果(Apple),葡萄(Grape)或草莓(Strawberry)的實(shí)例。而如果接到不合法的要求,F(xiàn)ruitGardener 類會(huì)拋出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');}}}

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

class BadFruitException extends Exception{}

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

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

這樣,農(nóng)場一定會(huì)百果豐收啦!

3.使用簡單工廠模式設(shè)計(jì)一個(gè)“面向?qū)ο蟮?rdquo;計(jì)算器

/** * 面向?qū)ο笥?jì)算器 * 思路: * 1、面向?qū)ο蟮幕?,封裝、繼承、多太 * 2、父類公用類 * 3、各種運(yùn)算類 */ /** * 基類,運(yùn)算類 * 只提供基本數(shù)據(jù),不參與運(yùn)算 */ class Operation {   // 第一個(gè)數(shù) public $first_num = 0;   // 第二個(gè)數(shù) public $second_num = 0;   /**  * 獲取結(jié)果,其他類覆蓋此方法  * @return double $result  */ public function getResult() {  $result = 0.00;     return $result; }} /** * 加法類 */class OperationAdd extends Operation { /**  * 覆蓋父類,實(shí)現(xiàn)加法算法  */ public function getResult() {  $result = 0;  return $this->first_num + $this->second_num; }} /** * 減法類 * */class OperationSub extends Operation { /**  * 覆蓋父類,實(shí)現(xiàn)加法算法  */ public function getResult() {  $result = 0;  return $this->first_num - $this->second_num; }} /** * 乘法類 * */class OperationMul extends Operation { /**  * 覆蓋父類,實(shí)現(xiàn)加法算法  */ public function getResult() {  $result = 0;  return $this->first_num * $this->second_num; }} /** * 除類 * */class OperationDiv extends Operation { /**  * 覆蓋父類,實(shí)現(xiàn)加法算法  */ public function getResult() {  $result = 0;     if ($this->second_num == 0) {   throw new Exception('除法操作第二個(gè)參數(shù)不能為零!');   return 0;  }     return $this->first_num / $this->second_num; }} /** * 工廠類 */class OperationFactory { /**  * 工廠函數(shù)  * @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());


注:相關(guān)教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
成人黄动漫网站免费| 国产欧美亚洲一区| 日韩精品欧美成人高清一区二区| 成年人免费影院| 国产精品视频xxxx| 日韩av在线免播放器| 亚洲高清久久久| 国产一区二区三区黄网站| 欧美变态tickling挠脚心| 国产亚洲aⅴaaaaaa毛片| 亚洲日本香蕉视频| 欧美日韩中文精品| 欧美成年人视频网站欧美| 激情综合色综合久久| 国模大胆一区二区三区| 国产专区在线视频| 韩国久久久久久| 噜噜噜久久,亚洲精品国产品| 欧美久久在线| 精品国产第一福利网站| fc2成人免费视频| 日韩精品无码一区二区三区免费| 日韩av在线看免费观看| 精品夜夜嗨av一区二区三区| 久久久女女女女999久久| 国内精品视频666| 欧洲美女免费图片一区| 尤物在线精品视频| 国产一区二区三区在线观看免费视频| 激情高潮到大叫狂喷水| 3atv一区二区三区| 日韩国产精品久久久| videoxxxx另类日本极品| 99精彩视频| frxxee中国xxx麻豆hd| 日韩黄色一级大片| 性欧美欧美巨大69| 成人在线视频电影| 欧美二区观看| 男女污污视频网站| 国产精品日韩av| 国内国产精品天干天干| 欧美一区二区三区的| 日韩精品色哟哟| 性久久久久久久久久久久久久| 日韩国产高清影视| 狠狠综合久久av一区二区老牛| 欧美成ee人免费视频| 奇米777影视成人四色| 久久国产色av免费观看| 色www精品视频在线观看| 中文在线官网天堂| 国产 日韩 欧美 精品| 欧美成人aaa片一区国产精品| 最近免费观看高清韩国日本大全| 嫩草视频在线免费观看| 免费在线看电影| 国产传媒欧美日韩成人| av日韩久久| 国产不卡视频一区| 国产成人看片| 中文字幕免费在线观看视频一区| 日韩极品一区| 日韩情爱电影在线观看| 亚洲爆乳无码精品aaa片蜜桃| 非洲一级黄色片| 精品国产一区二区三区久久狼5月| 国产艳妇疯狂做爰视频| 国产电影一区在线| 日韩欧美美女一区二区三区| 久久66热re国产毛片基地| 欧美视频日韩视频在线观看| 免费欧美一级片| 精品成人佐山爱一区二区| 亚洲一级Av无码毛片久久精品| 久久视频在线观看中文字幕| 久久久精品一区二区涩爱| 无码人妻精品一区二区蜜桃网站| 黄色国产网站在线播放| 日韩精品无码一区二区三区| 国产欧美一区二区视频| www.激情小说.com| 极品国产91在线网站| 国产黄色小视频在线观看| 精品国产免费一区二区三区香蕉| 农村妇女精品一二区| 国新精品乱码一区二区三区18| 羞羞的视频免费| 国产精品偷伦一区二区| 天堂精品在线视频| 91黄色在线看| av中文字幕第一页| 永久av免费网站| 最好2018中文免费视频| 亚洲日本韩国一区| 啦啦啦在线视频免费观看高清中文| 欧美国产日韩二区| 春暖花开成人亚洲区| 黄色国产一级视频| 精品51国产黑色丝袜高跟鞋| a视频在线播放| 5g影院5g电影天天爽快| 在线播放国产视频| 麻豆高清免费国产一区| 亚洲成人a级网| 成人性视频免费看| 日本欧美在线| 久草热久草热线频97精品| 秋霞av一区二区三区| 高清一区二区三区视频| 男人日女人逼逼| 国产精品资源站| 久久精品国内一区二区三区水蜜桃| 亚洲欧美日韩精品久久| 欧美最猛性xxxxx亚洲精品| 精品国产伦一区二区三区观看方式| 欧美人与动性xxxxbbbb| 欧美乱妇一区二区三区不卡视频| 日本japanese极品少妇| 性感小视频在线看免费| 国产97免费视频| 人妻内射一区二区在线视频| 大胆人体一区| 国产一卡不卡| 精品69视频一区二区三区| 久久久久久久久久久电影| 成人免费在线网| 一区二区欧美日韩视频| 亚洲综合在线网站| 日韩精品1区2区3区| 成人精品视频| 91插插插插插插插插| 欧美激情综合亚洲一二区| 免费a在线观看| 天天射—综合中文网| 色视频一区二区三区| 麻豆91在线播放免费| 午夜精品久久久久久久99樱桃| 欧美精品中文字幕亚洲专区| 一级淫片免费看| 无遮挡在线观看| 欧美一区二区三区四区在线观看地址| 15—17女人毛片| 成人免费小视频| 天天躁日日躁狠狠躁欧美巨大小说| 国产不卡视频一区| 成a人片在线观看| 久久久国内精品| h视频在线免费观看| 日韩精品中文字幕一区| 希岛爱理一区二区三区av高清| 亚洲日本在线看| 视频一区二区三区不卡| www.久久久久久久久久久| 我的公把我弄高潮了视频| 国产精品久久久久久久久免费高清| 欧美成人黑人| 国产不卡在线观看视频| 欧美日一区二区三区在线观看国产免| 这里只有精品在线观看视频| 色综合手机在线| 污视频网站在线观看| 国产在线精品一区二区夜色| 免费看的黄色欧美网站| 欧美一级黄色录像片| 91在线免费观看| 亚洲精品婷婷| 97精品人妻一区二区三区| 天堂一本之道| 日韩中文字幕免费视频| 法国空姐在线观看免费| 一级特黄曰皮片视频| 国产精品久久久久久亚洲色| 999国产精品视频免费| 欧美精品自拍偷拍动漫精品| 日韩欧美一区二区免费| 国产国产国产国产国产国产| 黄色性视频网站| 污视频在线观看免费网站| 久久久久噜噜噜亚洲熟女综合| 成人激情校园春色| 欧美1区2区3区4区| 深夜福利一区二区三区| 你懂的视频在线观看| 日日噜噜噜夜夜爽亚洲精品| 久久久久久久久久久久电影| 成人盗摄视频| 久久av少妇| 97免费高清电视剧观看| 亚洲夜间福利| 成人黄色免费| 啊灬啊灬啊灬啊灬高潮在线看| 一区二区三区视频免费| 麻豆影视国产在线观看| 欧美成人黑人猛交| 羞羞色院91蜜桃| 久久久精品一区二区| 都市激情亚洲| 日韩欧美亚洲区| 麻豆av在线| 色在线视频网| 日韩一区二区精品视频| 欧美一区二区少妇| se在线视频| xxx免费视频观看| 99re热视频精品| 成人h动漫精品一区二| 欧美日韩国产综合在线| 国产精品一区二区你懂得| 欧美人与动性xxxxx杂性| www国产精品内射老熟女| 欧美视频第一页| 欧美午夜精品一区二区蜜桃| 美女网站视频一区| 久久久99精品免费观看不卡| 国产精品成人免费观看| 欧美激情一级片一区二区| 欧美一级网址| 免费看男男www网站入口在线| 亚洲制服欧美久久| 精品全国在线一区二区| 深夜福利在线视频| 99久久久久久99| 国产jizz18女人高潮| 快播电影网址老女人久久| 亚洲午夜一区| 精品国产91久久久久久浪潮蜜月| 精品无人区乱码1区2区3区在线| 国产对白叫床清晰在线播放| 亚洲www啪成人一区二区| 欧美激情一区二区视频| 综合国产在线视频| 免费色片视频| 国产精品视频网址| 操你啦在线视频| 亚洲精品日产aⅴ| 欧美黄色一级生活片| 国产网站麻豆精品视频| 欧美熟乱第一页| 色综合视频一区二区三区高清| 国产精品va无码一区二区三区| 搡女人真爽免费午夜网站| 精品无码黑人又粗又大又长| 精品熟妇无码av免费久久| 亚洲成av人片在线观看| 青青草精品视频在线| 国产福利电影在线播放| 嫩草研究院在线观看| 久久成人18免费网站| 国产在线视频你懂的| 偷窥自拍欧美色图| 亚洲一区二三区| 欧美激情aaaa| 2020久久国产精品| xxxxx国产| 欧美丰满少妇xxxxx做受| 黄色污污在线观看| 99视频精品免费视频| 国产日韩欧美在线一区| 一道本无吗一区| av官网在线观看| 精品人妻无码一区二区三区换脸| 最新中文在线视频| 成人手机电影网| 麻豆视频在线观看免费网站黄| 日韩成人在线网站| 国内精品写真在线观看| 亚洲理论中文字幕| 欧美91大片| 懂色av中文一区二区三区天美| 欧美在线|欧美| 久久久精品国产亚洲| 久久国产三级| 欧美日韩天天操| 一区二区三区观看| 欧美另类一区二区| 久久99国产精品自在自在app| 中文字幕在线播放av| 日韩va欧美va亚洲va久久| 国产成人综合视频| 日韩免费精品视频| 亚洲无限乱码一二三四麻| 鲁啊鲁视频在线精品| 制服丝袜影音| 欧美视频免费| 黄色网址中文字幕| 国产麻豆精品theporn| 日韩少妇裸体做爰视频| 精品成人一区二区三区免费视频| 欧美久久精品午夜青青大伊人| 国产精品一区二区入口九绯色| 四虎成人影院网址| 日本学生初尝黑人巨免费视频| 97电影在线观看| 日韩av中文字幕一区| 国产a精品视频| 丁香激情视频| 亚洲一区二区美女| 国产一区私人高清影院| 农村老熟妇乱子伦视频| 国产精品亚洲欧美一级在线| freexxxx性特大另类| 成人免费视频网站| 久久99国产成人小视频| 日韩美女在线看| 日日干日日操日日射| 久久久综合亚洲91久久98| 欧美激情亚洲色图| 国产精品一级黄片| 国产精品30p| 97成人超碰| 成人a免费在线看| 最近最新中文字幕在线| 里番在线播放| 中文字幕日韩有码| 中文字幕中文字幕在线十八区| 吞精囗交69激情欧美| 日韩欧美视频在线播放| 亚洲自拍都市欧美小说| 亚洲色图在线视频| 国产精品欧美久久久久天天影视| 日韩精品福利片午夜免费观看| 美女高潮久久久| 中文字幕av一区中文字幕天堂| 最近2018中文字幕免费在线视频| 国产成人自拍在线| 人操人视频在线观看| 国产高清在线|