淺讀《大話設(shè)計(jì)模式》
----------------2、商場(chǎng)促銷-----策略模式
從本章我首先得到的第一個(gè)信息是:策略模式的問(wèn)題,簡(jiǎn)單工廠模式也能實(shí)現(xiàn);推而廣之,同一個(gè)問(wèn)題,可能許多模式都能實(shí)現(xiàn),但是這里總存在一個(gè)更優(yōu)的問(wèn)題。至于真正用那個(gè)模式,就是C++之父的那句話了:需要經(jīng)驗(yàn)智慧了。
第二個(gè)馬上引出問(wèn)題的結(jié)論:“面向?qū)ο蟮木幊蹋⒉皇穷愒蕉嘣胶茫惖膭澐质菫榱朔庋b,但分類的基礎(chǔ)是抽象,具有相同屬性和功能的對(duì)象的抽象集合才是類”。這一句,我覺(jué)得是最深刻的道出類設(shè)計(jì)原則的精辟之語(yǔ)。意思:第一、類并非越多越好,設(shè)計(jì)一個(gè)類是有價(jià)值有意義的:是為了封裝(簡(jiǎn)單工廠的那個(gè)工廠類就是一個(gè)純封裝作用的類,但大多數(shù)情況建立一個(gè)類還需要?jiǎng)e的理由,可能簡(jiǎn)單工廠屬于一個(gè)特例)。第二、何時(shí)設(shè)計(jì)類,當(dāng)處理的看似一些雜亂無(wú)章的東西具有相同的屬性和功能時(shí),就有必要?jiǎng)?chuàng)建類,因?yàn)椋脤?duì)象實(shí)現(xiàn)某些功能在可維護(hù)可復(fù)用等方面要比直接的函數(shù)過(guò)程似的編程要好得多。以上兩點(diǎn),可能就是怎樣將實(shí)際問(wèn)題抽象成類的秘訣了!
當(dāng)時(shí)我看到現(xiàn)金收費(fèi)工廠類時(shí),我心里已經(jīng)為“菜鳥”拍案叫絕了。他的學(xué)習(xí)能力好強(qiáng)呀!⊙﹏⊙b汗!然而,大鳥后面的那些一針見(jiàn)血的話同時(shí)也讓我進(jìn)入了沉思。。。當(dāng)我們發(fā)現(xiàn)自己好不容易掌握了一樣?xùn)|西,我們似乎認(rèn)為自己學(xué)得是易筋經(jīng),以后就可以以此橫掃天下了,但是還沒(méi)出走出山門,就被路上的山賊給鄙視了。。。這可能是少林寺有了易筋經(jīng)還要有72絕技的原因。。。
被鄙視的原因:簡(jiǎn)單工廠模式只是解決了對(duì)象的創(chuàng)建問(wèn)題,工廠需要包括所有的對(duì)象的創(chuàng)建,如果對(duì)象形式經(jīng)常變化,就需要經(jīng)常改動(dòng)工廠,以致代碼重新編譯。結(jié)論:面對(duì)對(duì)象形式不斷變化的情況,應(yīng)該采取比工廠模式更好的武功!
幸虧這本秘籍并不難找:策略模式---它定義了算法家族,分別封裝起來(lái),讓他們之間可以互相替換,此模式讓算法的變化,不會(huì)影響到使用算法的客戶。[DP]
問(wèn)題:在2.7策略模式解析之上的部分,作者最終利用的方法是將策略模式與簡(jiǎn)單工廠模式結(jié)合起來(lái)用,當(dāng)然與之對(duì)比的簡(jiǎn)單工廠模式顯然稍遜一籌。但是我個(gè)人的觀點(diǎn)是:此處采用單純的策略模式而不是兩者結(jié)合更好。即2.5的實(shí)現(xiàn),因?yàn)槲艺J(rèn)為:加入工廠模式就同時(shí)將本問(wèn)題中工廠模式的問(wèn)題帶進(jìn)來(lái)了,策略模式的Context需要經(jīng)常重新編譯;而相對(duì)于算法經(jīng)常變化的情況,將算法選擇交給客戶端應(yīng)該還是可取的。現(xiàn)對(duì)而言,我認(rèn)為前者更好操作。不夠,當(dāng)我讀到本章最后時(shí),我才又一次發(fā)現(xiàn)我的孤陋寡聞!還有更好的招!后面再學(xué)。
策略模式的關(guān)鍵之一----------Context:“策略模式的Strategy類層次為Context定義了一系列的可供重用的算法或行為。繼承有助于析取出這些算法中的公共功能”。
策略模式理解核心-------------“策略模式就是用來(lái)封裝算法的,但在實(shí)踐中,我們發(fā)現(xiàn)可以用它來(lái)封裝幾乎任何類型的規(guī)則,只要在分析過(guò)程中聽到需要在不同時(shí)間應(yīng)用不同的業(yè)務(wù)規(guī)則,就可以考慮使用策略模式處理這種變化的可能性[DPE]”。
在基本的策略模式中,選擇所用的具體實(shí)現(xiàn)的職責(zé)由客戶端對(duì)象承擔(dān),并轉(zhuǎn)給策略模式的Context對(duì)象[DPE]。這是策略模式本身純粹的定義,所以,“選擇所用最終怎樣處理”還有很多文章可做!
“反射反射,程序員的快樂(lè)”,我以前又從來(lái)沒(méi)有聽過(guò)。。。怎么讓我想起了慕容家族的絕技-----斗轉(zhuǎn)星移了呢?我的神呀?