美文网首页源码分析Android开发Android知识
每日Android源码设计模式之-6、策略模式

每日Android源码设计模式之-6、策略模式

作者: Alexey | 来源:发表于2017-03-20 07:56 被阅读75次

    当我们在实现一个功能的时候,有很多种的实现方式,比如说排序算法,有快速排序、冒泡排序、插入排序等等。可能我们的做法是将方法放到一个类中,或者是用if...else..语句来判断,但是显然违背了OCP原则单一职责原则,并且如果有新的实现方式需要添加,就要去改动整个类,大大加深了维护难度。


    定义:

    策略模式定义了一系列的算法,并且将之封装起来,而且各个算法可以相互替换。

    我们常使用的MVP模式中的Presenter层就是对策略模式的实现,一个View在不同的条件下,可以对应不同的Presenter层。


    类图:

    策略模式类图

    Context是用来操作策略的类,里面有个setStragety方法,可以设置不同的策略类进去(StragetyA或者StragetyB)。设置不同的策略类就能实现不同的algorithm算法了。


    Android源码中的应用:

    动画中的TimeInterpolator(时间插值器)

    有几种不同的实现策略:

    线性插值器(LinearInterpolator)

    加速插值器(AccelerateDecelerateInterpolator)

    减速插值器(DecelerateInterpolator)

    类图:

    插值器运用的策略模式

    可以看出来Interpolator就是策略抽象,而各种具体的XxxInterpolator就是具体实现的策略类。


    开发中的实际应用MVP模式中用到的策略模式

    MVP中的策略模式

    讲解:比如我们有一个比赛数据展示的页面View,有篮球、足球、乒乓球等的数据需要展示,View的展示方式是一样的,但是去网络请求数据的参数,以及数据回来需要做一点处理的逻辑篮球、足球、乒乓球却不同。

    于是我们可以定义一个BasePresenter,里面有一个抽象的loadData方法。

    在具体的策略实现子类中可以根据自己的情况去loadData,并且处理Data,处理完毕后,通过View中的refreshVeiw(Data data)方法返回数据,通知View更新界面。


    优点:

    结构清晰明了、使用简单直观

    耦合度降低,扩展方便

    操作封装更为彻底,数据更为安全

    缺点:

    类的数量增加。

    相关文章

      网友评论

        本文标题:每日Android源码设计模式之-6、策略模式

        本文链接:https://www.haomeiwen.com/subject/jukbnttx.html