Android 的设计模式---策略模式

15 篇文章 0 订阅

前言:

Android 的设计模式系列文章,欢迎star,持续更新。。。

Android 的设计模式---单例模式

Android 的设计模式---建造者模式

Android 的设计模式---三种工厂模式

Android 的设计模式---策略模式

Android 的设计模式---责任链模式

Android 的设计模式---观察者模式

定义:

定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换。在不同环境下选择不同的策略来产生不同的结果。

实例:

  • 算法,如果有个排序算法,我们可以选择:冒泡,直接,插入,快速 排序等
  • 列表,如果有个列表需要显示,我们可以选择不同的adapter,比如 ArrayAdapter,SimpleAdapter,BaseAdapter等
  • 插值器,setInterpolator ()  如线性,非线性,先加速后减速,先减速后加速等
  • 一道菜的做法有很多种:清蒸,爆炒,小炒

我今天就选用猪肉的做法来解释一下策略模式的结构,为什么选择猪肉呢?(

时下是2019年,今天也是猪肉最贵的一年,瘦肉30一斤,排骨已经快到了35快40一斤了, 深深感觉到在大城市生活艰辛啊,小编觉得就快连猪肉都吃不起了呢,不如跟我一起吃鸡肉或者鱼肉吧,哈哈。再说现在瘟疫怎么那么多啊,时不时猪瘟,这疫情也太多了吧。前段时间差点就和老朋友一起回去干养殖业去了,老家很多人因为猪瘟的传播,赚了一大笔,因为他们养几万只鸡,卖的可好了。主要还是因为有抖音这个大平台,用得妥当,确实有不菲的收入。

好吧,吐槽完了,一起来看看策略模式下猪肉的做法吧。

代码:

/**
 * 猪肉做法策略
 */
public interface PigMainStragety {
    void pigAction();
}
/**
 * 清蒸 猪肉
 */
public class SteamStragety implements PigMainStragety {
    @Override
    public void pigAction() {

        System.out.println("调用清蒸的逻辑");
    }
}
/**
 * 小炒  猪肉
 */
public class FiredStragety implements PigMainStragety {
    @Override
    public void pigAction() {
        System.out.println("调用小炒的逻辑");
    }
}
/**
 * 爆炒   猪肉
 */
public class StirFirStragety implements PigMainStragety {
    @Override
    public void pigAction() {
        System.out.println("调用爆炒的逻辑");
    }
}

public class PigMainImpl {
    private PigMainStragety pigMainStragety;

    public PigMainImpl(PigMainStragety pigMainStragety) {
        this.pigMainStragety = pigMainStragety;
    }

    public void mainAction() {
        pigMainStragety.pigAction();
    }

}
public class ClienTest {
    public static void main(String[] args) {

        PigMainImpl pigMain;

        //清蒸
        pigMain = new PigMainImpl(new SteamStragety());
        pigMain.mainAction();
        //小炒
        pigMain = new PigMainImpl(new FiredStragety());
        pigMain.mainAction();
        //爆炒
        pigMain = new PigMainImpl(new StirFirStragety());
        pigMain.mainAction();
    }
}

应用场景:

  • 同一个问题具有不同算法时,具体的实现细节不同
  • 对客户隐藏具体策略(算法)的实现细节,彼此完全独立;提高算法的保密性与安全性
  • 一个类拥有很多行为,而又需要使用if-else或者switch语句来选择具体行为时。使用策略模式把这些行为独立到具体的策略类中,可以避免多重选择的结构

优缺点: 

  • 策略类可以互相替换由于策略类都实现同一个接口,因此他们能够互相替换。
  • 耦合度低,方便扩展增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合开闭
  • 避免使用多重条件选择语句
  • 策略的增多会导致子类的也会变多
  • 户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值