在實現(xiàn)策略模式的時候,我們習慣用switch-case來代替if-else if-else,在代碼結構上會更加清晰,但這也只是從代碼結構這個層面上來考慮,我們可以從代碼速度上來考慮設計問題。
無論是switch-case還是if-else if-else的設計,都會遇到一個問題:如果判斷的條件很多,假設是n個,而滿足的條件恰好是最后一個,那么代碼的執(zhí)行效率就是o(n)。
為了找到一個能夠執(zhí)行的代碼,我們實際上是判斷了n次,當然,這個判斷其實是很快的,一般情況下的效率折損是不用考慮的,就算判斷條件很多,但涉及那么多判斷條件的業(yè)務場景,本身就是個災難了。
我們可以通過一種數(shù)據(jù)結構來解決這個問題。
策略模式的目的就是根據(jù)某種類型尋找對應的策略,如果將該類型理解為key,而策略就是value的話,我們很快就能明白,這就是key-value的查找。
key-value的容器類自然想到HashMap。
在我們之前的文章 http://www.cnblogs.com/wenjiang/p/6019000.html 中提到了一個業(yè)務場景,就是根據(jù)對應的廣告平臺尋找對應的平臺調用方法。這里利用HashMap來重新整理我們的代碼結構。
我們定義了Enum類ShowType表示要展示的廣告類型,然后各種類型的Controller就是對應的策略類。
Map<ShowType, Object> controllerMap = new HashMap(); controllerMap.put(ShowType.Banner, createBannerProperties(activity, slotId, viewGroup, platforms); ...
我們定義一個ShowType為key值,Controller為value值的HashMap,然后將對應的key-value放進去。
原先我們是根據(jù)傳進來的ShowType返回對應的Controller: