在实现策略模式的时候,我们习惯用switch-case来代替if-else if-else,在代码结构上会更加清晰,但这也只是从代码结构这个层面上来考虑,我们可以从代码速度上来考虑设计问题。

    无论是switch-case还是if-else if-else的设计,都会遇到一个问题:如果判断的条件很多,假设是n个,而满足的条件恰好是最后一个,那么代码的执行效率就是o(n)。

    为了找到一个能够执行的代码,我们实际上是判断了n次,当然,这个判断其实是很快的,一般情况下的效率折损是不用考虑的,就算判断条件很多,但涉及那么多判断条件的业务场景,本身就是个灾难了。

    我们可以通过一种数据结构来解决这个问题。

    策略模式的目的就是根据某种类型寻找对应的策略,如果将该类型理解为key,而策略就是value的话,我们很快就能明白,这就是key-value的查找。

    key-value的容器类自然想到HashMap。

    在我们之前的文章 http://www.cnblogs.com/wenjiang/p/6019000.html 中提到了一个业务场景,就是根据对应的广告平台寻找对应的平台调用方法。这里利用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放进去。

    原先我们是根据传进来的ShowType返回对应的Controller:

网友评论