從商場打折到機房重構計算固定用戶和臨時用戶的消費情況,再到現在的Duck,三次接觸類策略模式,可見這是一個比較重要的模式.
在使用策略模式之前,首先要知道什么是策略模式?策略模式是干嗎用的?策略模式有它的好處也必定存在一定的缺陷.
策略模式:
它定義了算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶.
策略模式其實就是用來封裝算法的。當不同的行為堆砌在一個類中,就很難避免使用條件語句來選擇合適的行為。我們就可以用策略模式,將這些行為封裝在一個個獨立的Strategy類中,就可以消除這些類中的條件語句了。
商場打折:
商場收銀時,不管理打折還是返利,都是一些算法,我們把這些算法是可變的,我們把這些變化的封裝起來,也實現了面向對象的思維方式。
機房重構:
做機房收費系統時,我們對臨時用戶和固定用戶的收費方式是不一樣的,但是他們的本質是一樣的,都是計算學生的消費金額,這是我們就把它寫成策略模式,把兩種不同的算法封裝起來。
Duck:
這次又用java語言重新認識了一下策略模式,鴨子繼承Duck,飛行行為實現FlyBehavior接口,呱呱叫的行為實現QuackBehavior接口。其實鴨子的行為就可以看成算法,萬變不離其宗,意思是一樣的,封裝了鴨子的行為相當于我們封裝了算法。
優點:
策略模式不僅提供了管理各種算法的辦法,簡化了單元測試,我們可以通過每個類自己的接口單獨測試;避免了我們使用多重條件轉移語句;繼承有助于吸取出這些算法中的公共功能。
每一種模式都要他存在的優勢,不然也不會存在。當然,缺點也是必不可少,人無完人,模式也沒有十分完美的模式。
缺點:
策略模式只適用于客戶端知道所有的算法或行為的情況。而且策略模式會造成很多策略類,每一個具體策略類又會產生一個新類。
----------------------------------------------------------------------------------------------------------------------------(^_^) 學習是一個循序漸進,反反復復的過程 (^_^)
上一篇 Lua序列化