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

首頁 > 編程 > PHP > 正文

PHP設計模式之裝飾者模式

2020-03-22 19:04:32
字體:
來源:轉載
供稿:網友

  • 有這樣一個項目,做一個餐廳訂餐系統。起初的代碼結構是這樣的。前面有很多Beverage的繼承類,現在遇到的問題是牛奶的價錢上漲了,那么所有相關的類,我們都要進行調整,比如Milk,SugarAndMilk類,這種類還有很多,我們需要逐個去修改類中的方法——開發人員每次都做這種事情,要瘋了!所以我們要改變現有的結構。以下的圖都是簡圖,實際的圖,可沒有這么簡單。


    設計問題:

    1》類數量爆炸,有很多類,難以維護;

    2》整個設計呆板;

    3》基類加入的新功能無法使用于子類;

    復用類方法的方式很多,比如繼承,組合,委托。為什么老是習慣用繼承呢?我看Zend Framework也有這種習慣!每次找對應方法,一直往上翻。——題外話!!!!

    后來經過小組研究決定,我們決定把基礎類抽出來,比如,我們把咖啡做成一個單獨的類,其他的咖啡,比如牛奶咖啡,甜味咖啡,我們只對材料單獨包裝成一個類。

    經過改良的設計:


    詳解

    1》對于飲品,我們直接繼承Beverage類,直接把報價寫進飲品類里面;

    2》而對于一些需要添加調味品的特殊飲品,我們做累加操作。比如,我想要杯奶咖啡,則 總價=咖啡價+奶價

    3》這樣不同的飲料就很容易知道它的價格。

    <?php abstract html' target='_blank'>class Beverage{     public $_name;     abstract public function Cost(); } // 被裝飾者類 class Coffee extends Beverage{     public function __construct(){         $this->_name = 'Coffee';     }        public function Cost(){         return 1.00;     }    } // 以下三個類是裝飾者相關類 class CondimentDecorator extends Beverage{     public function __construct(){         $this->_name = 'Condiment';     }        public function Cost(){         return 0.1;     }    }   class Milk extends CondimentDecorator{     public $_beverage;     public function __construct($beverage){         $this->_name = 'Milk';         if($beverage instanceof Beverage){             $this->_beverage = $beverage;         }else            exit('Failure');     }        public function Cost(){         return $this->_beverage->Cost() + 0.2;     }    }   class Sugar extends CondimentDecorator{     public $_beverage;     public function __construct($beverage){         $this->_name = 'Sugar';         if($beverage instanceof Beverage){             $this->_beverage = $beverage;         }else{             exit('Failure');         }     }     public function Cost(){         return $this->_beverage->Cost() + 0.2;     } }   // Test Case //1.拿杯咖啡 $coffee = new Coffee();   //2.加點牛奶 $coffee = new Milk($coffee);   //3.加點糖 $coffee = new Sugar($coffee);   printf("Coffee Total:%0.2f元/n",$coffee->Cost());

    1.裝飾者(Milk)和被裝飾者(Coffee)必須是一樣的類型。目的是裝飾者必須取代被裝飾者。
    2.添加行為:當裝飾者和組件組合時,就是在加入新的行為。

    題外話:
    1.利用繼承設計子類行為,是在編譯時靜態決定的,而且所有的子類都會繼承到相同的行為。打個比方,老子想學點功夫,看你小子會太極拳,老子只需要繼承你一下 ,老子也就會太極拳了——呵呵,這時老子就變成你兒子了,看來繼承是要付出代價的。

    2.組合,我們可以擴展對象的行為,在運行時動態地進行擴展。利用組合我們可以隨時把我們當時設計超類時沒有想到的方法加入到對象中,而不用改變現有的代碼。打個比方,老子現在沒有內力,吸功大法,把和尚,尼姑,道士的內力(行為對象)都吸過來,那在搏斗(運行時)中,老子可以隨時都能使用不同的內力,但也不能胡亂吸內力,否則你就要走火入魔了!

    3.類應該對擴展開放,對修改關閉。如果我們每個部分都用裝飾者模式進行設計,那么對于整個框架來說有點浪費,而且你也加大了代碼的難度。那什么時候使用這種模式呢?我們一般用于經常改變的地方。那我們又怎么知道哪些是經常改變的地方呢?這個就需要我們的經驗和你對所處行業的了解。建議大家平時多看點例子。

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    亚洲一区中文字幕在线观看| 在线视频中文亚洲| 中文字幕日韩av综合精品| 一本久久综合亚洲鲁鲁| 久久久久久久久电影| 欧美性资源免费| 久久久999精品免费| 国产亚洲精品美女久久久| 久久久欧美精品| 国产999精品久久久| 久久久久久有精品国产| 日韩大陆毛片av| 国产精品高清免费在线观看| 亚洲性av网站| 日韩在线欧美在线国产在线| 欧美日韩精品二区| 亚洲黄页网在线观看| 精品亚洲男同gayvideo网站| 色综合天天综合网国产成人网| 国产成人久久精品| 国产精品99久久久久久久久久久久| 亚洲欧美日韩直播| 亚洲国产精品一区二区三区| 欧美成人精品激情在线观看| 欧美国产日韩一区二区在线观看| 亚洲第一视频在线观看| 欧美日韩在线看| 91色在线视频| 欧美一级片久久久久久久| 欧美丰满老妇厨房牲生活| 亚洲欧美日韩久久久久久| 亚洲精品美女网站| 欧美另类极品videosbestfree| 精品久久久久久久久久久| 成人天堂噜噜噜| 亚洲国产古装精品网站| 亚洲精品在线不卡| 亚洲肉体裸体xxxx137| 亚洲女成人图区| www.久久久久久.com| 日韩在线免费av| 欧美电影第一页| 91国自产精品中文字幕亚洲| 欧美黄色免费网站| 成人黄色午夜影院| 国产精品久久久一区| 激情成人在线视频| 欧美一级大片在线免费观看| 精品在线欧美视频| 国产精品精品久久久| 久久99久国产精品黄毛片入口| 久久久久久久999精品视频| 欧美成人一区二区三区电影| 亚洲日本成人网| 久久久久久久电影一区| 91精品国产免费久久久久久| 国产精品久久久久久久久粉嫩av| 久久97久久97精品免视看| 欧美激情在线观看| 欧美重口另类videos人妖| 亚洲精品一区中文| 精品久久久香蕉免费精品视频| 成人欧美一区二区三区黑人孕妇| 欧美成人剧情片在线观看| 91久久精品国产91久久性色| 国产精品自产拍高潮在线观看| 欧美一区二区影院| 在线观看久久久久久| www.国产精品一二区| 欧美日韩中国免费专区在线看| 国产免费一区二区三区香蕉精| 成人免费视频网| 成人午夜在线影院| 成人欧美在线观看| 国外成人免费在线播放| 91久久精品国产91久久| 亚洲午夜未删减在线观看| 26uuu另类亚洲欧美日本老年| 中文字幕视频在线免费欧美日韩综合在线看| 日韩综合中文字幕| 在线视频免费一区二区| 精品在线观看国产| 久久视频国产精品免费视频在线| 成人福利网站在线观看11| 懂色av一区二区三区| 欧美天天综合色影久久精品| 国产色视频一区| 97人人模人人爽人人喊中文字| 视频在线观看99| 国产精品一区二区三区免费视频| 国产精品一区二区三| 久久久久久中文字幕| 欧美精品一区二区三区国产精品| 国产精品高精视频免费| 国产精品美女久久久免费| 成人免费激情视频| 日韩av中文字幕在线播放| 国产一区二区视频在线观看| 国产精品一区二区女厕厕| 国产精品xxx视频| 欧美小视频在线观看| 中文字幕亚洲国产| 久久亚洲国产精品成人av秋霞| 久久久亚洲精品视频| 亚洲免费伊人电影在线观看av| 国产成人鲁鲁免费视频a| 国模精品系列视频| 日本亚洲欧美成人| 国产成人福利夜色影视| 亚洲的天堂在线中文字幕| 亚洲欧美日韩在线高清直播| 久久人人爽人人| 92看片淫黄大片欧美看国产片| 亚洲欧美一区二区三区情侣bbw| 性亚洲最疯狂xxxx高清| 日韩精品在线影院| 亚洲精品一区中文| 成人在线观看视频网站| 国产精品免费久久久久影院| 日韩在线观看免费全集电视剧网站| 欧美电影免费观看高清完整| 久久久久久国产精品久久| 国产精品夜色7777狼人| 亚洲美女自拍视频| 国产精品日日摸夜夜添夜夜av| 欧美与欧洲交xxxx免费观看| 国产精品日韩专区| 亚洲伊人久久综合| 国产免费一区二区三区香蕉精| 亚洲精品久久7777777| 欧美精品videosex性欧美| 国产在线不卡精品| 久久久久国产精品免费| 亚洲国产精品国自产拍av秋霞| 欧美高清videos高潮hd| 久久久久久香蕉网| 久热精品视频在线观看| 国产精品爽爽爽爽爽爽在线观看| 国产美女精品免费电影| 亚洲国产日韩欧美综合久久| 亚洲日本中文字幕| 国产亚洲一级高清| 91日本在线视频| 久久精品视频播放| 中文字幕欧美国内| 欧美午夜精品伦理| 51久久精品夜色国产麻豆| 亚洲天堂免费视频| 成人激情电影一区二区| 国产精品扒开腿做| 欧美国产日韩一区二区三区| 高清日韩电视剧大全免费播放在线观看| 亚洲国产精品字幕| 欧美激情乱人伦一区| 日韩在线视频观看正片免费网站| 国产精品999999| 国产日韩中文字幕| 这里只有精品在线观看| 国产精品麻豆va在线播放| 高清在线视频日韩欧美| 国产成人a亚洲精品| 久久综合色影院| 在线视频中文亚洲| 欧美日韩在线视频一区|