策略模式
問(wèn)題的描述:
需求:開(kāi)發(fā)一個(gè)鴨子游戲,能游泳,有外觀,實(shí)現(xiàn)類(lèi)圖如下:
增加的需求:
1. 加入飛行功能
2. 加入呱呱叫的功能。。。等等,暫時(shí)的解決方式如下:
上線(xiàn)后出現(xiàn)了些問(wèn)題:
1. 所有的鴨子都能叫嗎?木頭鴨子呢?
2. 所有的鴨子都能飛嗎?木頭鴨子呢?橡皮鴨子呢?
總結(jié)下,使用繼承的缺點(diǎn):
代碼在多個(gè)子類(lèi)中重復(fù)
運(yùn)行時(shí)的行為不容易改變
很難知道鴨子的全部行為
改變會(huì)牽一發(fā)動(dòng)全身,造成其他鴨子不想要的改變
。。。
好吧,我們引入接口來(lái)進(jìn)一步修改,類(lèi)圖如下:
問(wèn)題已經(jīng)解決了,但是鴨子子類(lèi)有40多種,我們修改fly方法,難道修改40種樣本?以后的維護(hù)的坑有點(diǎn)大哦!
總結(jié)下,這種方式的缺點(diǎn):
代碼在多個(gè)子類(lèi)中重復(fù)
維護(hù)成本提高(有40個(gè)子鴨子類(lèi),要修改fly方法需要改40次?)
。。。
問(wèn)題不斷,我們用設(shè)模式來(lái)解決這個(gè)問(wèn)題,先看看定義:策略模式:定義算法族,分別封裝起來(lái),它們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶(hù)。
好,我們修改下,類(lèi)圖如下:
我們用這個(gè)模式解決了:
1. 鴨子行為的各種各樣性(子類(lèi)行為和超類(lèi)沒(méi)有直接的關(guān)系了,添加刪除行為不影響繼承體系)
2. 代碼重用,維護(hù)問(wèn)題(子類(lèi)太多時(shí)修改行為特別麻煩,代碼重復(fù),只修改算算法組就搞定)
3. 動(dòng)態(tài)修改行為(Setter和Getter方法來(lái)靈活配置行為)
4. 。。。
這章我們學(xué)到的設(shè)計(jì)原則:
設(shè)計(jì)原則1: 封裝變化(找出應(yīng)用中可能需要變化之處,把它們獨(dú)立出來(lái),不要和那些不需要變化的代碼混在一起)。
設(shè)計(jì)原則2: 針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)類(lèi)
設(shè)計(jì)原則3: 多用組合,少用繼承
分享標(biāo)題:“HeadFirst設(shè)計(jì)模式“:策略模式-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)于:http://www.rwnh.cn/article48/dopsep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、Google、電子商務(wù)、網(wǎng)站策劃、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容