开篇
今天我们来讨论一下设计模式中最常用的一种行为模式----策略模式,在实际的项目中,我们经常会解决类似这样的业务场景,比如,对于同一件事情,在不同时间或不同状态下,执行不同的逻辑,我们就可以通过策略模式来封装具体的算法规则,实际使用模块只需要知道使用何种策略即可,今天我们就通过两个数的运算来模拟多规则下策略模式如何设计并改善。
基本介绍
策略模式(Strategy Pattern)中,定义出一套算法族,让他们可以根据不同场景进行替换,同时通过定义配置对象来对外提供相应的算法对象。目的是解决多场景下,核心处理逻辑类似,判断语句过多的问题。
主要解决
- 通过if----else判断将不同类型的业务逻辑聚合在一起时,维护成本增高,耦合性高,可读性低。
- 所有逻辑糅合在一起,当有一处发生变化时,带动全体一起修改。
- 不能进行单元测试,或单元测试不便捷。
关键代码
- 封装算法接口。
- 多种算法类实现总接口。
- 提供配置对象给客户端调用算法类。
应用场景
- 本文案例,根据不同类型,对两个数执行不同运算逻辑。
- 不同时间段,商场开展不同促销活动。
- 旅行出游,选择不同交通工具,前往目的地。
优点
- 实际的算法和使用算法类直接耦合性减少。
- 减少大量的判断逻辑,将不同逻辑拆开,便于维护。
- 简化单元测试,可以针对性对某一策略进行测试和维护。
缺点
- 场景增多时,策略类会增多,造成类膨胀。
- 还是需要通过判断来寻找到具体策略。
- 算法实现类超过4个时,需要使用组合模式。
案例
给定两个数,num1,num2,分别计算加减乘除。
1、定义逻辑处理总接口
/**
* 数据计算接口
* 优点
* 定义数据计算的统一接口,
* 便于后续使用时不关心每个类中具体方法的定义,
*