前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是策略模式

什么是策略模式

作者头像
PhoenixZheng
发布2018-08-07 16:30:51
5670
发布2018-08-07 16:30:51
举报

策略模式应该是Java设计模式中最简单的一种模式, 它的核心思想是,一个类的行为可以在运行时动态改变,有不同的实现逻辑。

其实具体的说,它也是基于面向接口编程的思想,通过定义不同的实现类逻辑来做到的。

策略模式接口定义

比方说现在需要一个计算逻辑,对两个输入的数进行某种运算, 这里可以定义接口为

代码语言:javascript
复制
public interface Caculator {
    public int doCaculate(int a, int b);
}
策略模式实现

现在如果需要实现加法和算法,只需要定义两个对应的类,实现接口就可以

代码语言:javascript
复制
public AddCaculator implements Caculator {
    public  int doCaculate(int a, int b) {
        return a + b;
    }
}

public SubstractCaculator implements Caculator {
    public  int doCaculate(int a, int b) {
        return a - b;
    }
}

最后一步,策略模式需要一个策略类,

代码语言:javascript
复制
public class CalContext {
    private Caculator strategy;

    public CalContext ( Caculator caculator) {
        this.strategy = caculator;
    }

    public int executeStragety(int a , int b) {
        return this.stragety.doCaculate(a, b);
    }
}
```

#### 策略模式使用
在需要使用这个计算逻辑的时候,只需要实例化对应的类就可以,

javascript …. Caculator caculator = new AddCaculator(); CalContext context = new CalContext(caculator); context.executeStragety(1, 2); ````

划重点

到这里你可能会有些疑问,策略模式跟简单工厂模式有什么区别? 都是定义个接口,往一个Context/Factory类里传东西,然后执行抽象好的接口, 从代码层次来说一模一样啊? 这里来回顾下之前说的工厂模式, 设计模式之工厂模式

这里重点关注一个地方, 我们往 Context/Factory 的构造方法里穿的东西不同 · 策略模式 我们传的是构造好的执行对象, AddCaculator() · 工厂模式 这里传的是不是对象,而是定义好的参数,比如 "add"

他俩的区别在于,策略模式需要调用者创建好执行逻辑的对象,而工厂模式只需要告诉工厂我们要创建什么。

这么说可能不够具体,你可以这么想象, 我们去了一个咖啡厅,想喝一杯咖啡, 策略模式的咖啡厅会说

想喝卡布奇诺还是拿铁,自己调好咖啡和奶的比例拿给他,他帮你在咖啡机上磨好装杯子里给你

工厂模式的咖啡厅会说

跟他说要卡布奇诺还是拿铁就行,你不需要关心咖啡豆的比例和制作过程,他帮你做好装杯子里给你
总结

策略模式跟工厂模式其实思想非常接近, 都是通过接口来去耦合, 而两者的区别也比较容易理解, 策略模式侧重于让调用者控制逻辑的实现, 工厂模式则侧重于让调用者不关心具体的逻辑,只关心需要用什么东西。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 策略模式接口定义
  • 策略模式实现
  • 划重点
    • 想喝卡布奇诺还是拿铁,自己调好咖啡和奶的比例拿给他,他帮你在咖啡机上磨好装杯子里给你
      • 跟他说要卡布奇诺还是拿铁就行,你不需要关心咖啡豆的比例和制作过程,他帮你做好装杯子里给你
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档