郑州网站建设招聘,平面设计网上接单,国外网站大全帝国cms模板,套餐前言
策略模式是针对不同算法给出不同实现的方式#xff0c;解耦代码#xff0c;减少代码中if.....else代码书写量。
一、策略模式UNL类图 对象角色Context 上下文对象#xff0c;依赖Strategy接口#xff0c;一般像Context传入Strategy实现对象#xff0c;执行策略方法…前言
策略模式是针对不同算法给出不同实现的方式解耦代码减少代码中if.....else代码书写量。
一、策略模式UNL类图 对象角色Context 上下文对象依赖Strategy接口一般像Context传入Strategy实现对象执行策略方法 Strategy为不同实现类定义要执行策略的方法的接口StrategyImpl具体算法逻辑实现类主要是实现不同的算法实现
二、代码案例 以计算器的案例为例一个计算器要对两个数字进行加减乘除得算法最终都会得到一个结果。我们把执行加减乘除看做是不同的策略。
1、抽象出计算器加减乘除策略接口
public interface CallulatorStrategy {public double countResult(int a, int b);
}
2、定义加减乘除类的四个实现继承CalclulatorStrategy接口
public class CallulatorAdd implement CallulatorStrategy {Overidepublic double countResult(int a, int b) {return a b;}}public class CallulatorSubtract implement CallulatorStrategy {Overidepublic double countResult(int a, int b) {return a - b;}}public class CallulatorMultiplication implement CallulatorStrategy {Overidepublic double countResult(int a, int b) {return a * b;}}public class CallulatorDivision implement CallulatorStrategy {Overidepublic double countResult(int a, int b) {return a / b;}}
3、定义一个策略类用来执行策略类
public class StrategyContext {private CallulatorStrategy strategy;public StrategyContext (CallulatorStrategy strategy) {this.strategy strategy;}public double strategyExecute (double a, double b) {this.strategy.countResult(a, b);}}
4、调用示例
public class Demo {public static void main(String[] args) {StrategyContext context new StrategyContext (new CallulatorAdd()); System.out.println(context.strategyExecute(10, 5));context new Context(new CallulatorSubtract()); System.out.println(context.strategyExecute(10, 5));context new Context(new CallulatorMultiply()); System.out.println(context.strategyExecute(10, 5));}
}
三、总结
优点
1、减少了代码中的逻辑判断
2、算法可自由切换、实际开发算法实现类可配置在配置文件、数据库中
3、扩展性好
缺点
1、 策略类会随着业务扩展越来越多
2、策略类均要对外暴露
使用场景
1、减少判断语句
2、同一个对象不同的算法实现