學C 之設計模式系列筆記(1)策略模式

2022-08-27 22:54:17 字數 1212 閱讀 9676

一、借鑑說明

1.《head first design patterns》(中文名《深入淺出設計模式》)

2.維基百科,策略模式,

二、策略模式(strategy pattern)

將一類相同的演算法封裝起來,形成演算法族,只提供相同的介面給外界,同一演算法族內的演算法可以互相替換,外界使用時,沒有感覺什麼不同,即演算法族內的演算法獨立於使用者存在。

學生student和老師teacher去學校school的方式有很多種:坐公交bus,坐地鐵subway,坐車car等等。

因此就有了第一種情況:student有gotoschoolbybus、gotoschoolbysubway、gotoschoolbycar函式,teacher也有gotoschoolbybus、gotoschoolbysubway、gotoschoolbycar函式,uml如圖所示。但是這樣太過冗餘,這裡的冗餘具體是指:"搭乘交通工具的方式"是可以共用的部分,不管是student還是teacher都是可以坐bus、subway、car的。還有就是不靈活,如果以後突然有別的需求的話,例如走路walk去學校的話,那麼student和teacher就要分別修改了,費時費力,還有可能帶來***(如出現意想不到的bug),因此,需要把可能變化的部分提取出來,將這部分做成演算法族。

因此,改進上述情況:student、teacher都有gotoschool函式,並持有乙個iway介面的引用,而將bus、subway、car等相關的演算法封裝在iway這一演算法族裡。這樣,方便統一管理,方便外界的統一呼叫,而且需要新增演算法的時候,只需要修改way,並不影響原先的student、teacher。而且,也方便復用,假設有這樣的一種情況,studenta有眼疾,需要導盲犬doga的幫助才能gotoschool,這時,dog也擁有了gotoschool這一函式,也持有了乙個iway介面的引用。uml如圖所示:

**裡有會變化的部分,且該部分可以被提取出來(盡量使用"面向介面",這樣有利於解耦)

設計模式(c#)的相關**我都放在git上:

1.封裝原則

2.多用組合(has-a),少用繼承(is-a)

3.盡量"面向介面"

設計模式之Strategy 策略模式系列1

看了jdon上寫的的策略模式,例子很簡單,有些錯誤。文章寫的比較早,其實現在的策略模式大多是用enum來實現,會簡單的多,但是思想不變 不同的演算法或者行為各自封裝,使用者自行挑選。先摘抄他上面的 錯誤已經改正 strategy策略模式是屬於設計模式中 物件行為型模式,主要是定義一系列的演算法,把這...

設計模式系列之 策略模式

一 策略模式的概念 策略模式定義 定義一組演算法,將每個演算法都封裝起來,並且使它們之間可以互換。使用的場景 角色介紹 二 案列實現 小y最近在玩比較有情懷的經典遊戲魂斗羅.歸來,看著熟悉的場景,心裡感慨萬分,以前只是想著怎麼樣才能開掛式地打爆機,現在玩起來更多的是回味經典和享受運用不同的策略闖過不...

設計模式系列之 策略模式

一 策略模式的概念 策略模式定義 定義一組演算法,將每個演算法都封裝起來,並且使它們之間可以互換。使用的場景 角色介紹 策略模式通用uml 二 案列實現 小y最近在玩比較有情懷的經典遊戲魂斗羅.歸來,看著熟悉的場景,心裡感慨萬分,以前只是想著怎麼樣才能開掛式地打爆機,現在玩起來更多的是回味經典和享受...