1、基本概念
策略模式是行为型设计模式。算法
其用意是针对一组算法,将每个算法封装到具备共同接口的独立的类中,从而使得它们能够相互替换。设计模式
策略模式使得算法能够在不影响到客户端的状况下发生变化。并发
2、结构
下面是基本结构:框架
三类角色:分布式
环境(Context)角色:持有一个Strategy的引用。
抽象策略(Strategy)角色:这是一个抽象角色,一般由一个接口或抽象类实现。此角色给出全部的具体策略类所需的接口。
具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
3、案例
案例实现:ide
定义一族算法,能够实现对两个数的操做,例如+、-、*、/等。
实现代码总体框架图:高并发
具体代码实现:测试
Context类:this
/**spa
*/
public class Context {
private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public int executeStrategy(int num1, int num2){ return strategy.doOperation(num1, num2); }
}
Strategy接口:
/*策略的公共接口/
public interface Strategy {
int doOperation(int num1, int num2);
}
三种对应的算法实现:
/* 算法1: 实现加法 /
public class OperationAdd implements Strategy {
@Override public int doOperation(int num1, int num2) { return num1 + num2; }
}
/* 算法2:实现减法 /
public class OperationSubstract implements Strategy{
@Override public int doOperation(int num1, int num2) { return num1 - num2; }
}
/* 算法3: 实现乘法 /
public class OperationMultiply implements Strategy{
@Override public int doOperation(int num1, int num2) { return num1 * num2; }
}
测试类:
public class MyTest {
public static void main(String[] args) { Context context = new Context(new OperationAdd()); System.out.println("10 + 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationSubstract()); System.out.println("10 - 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationMultiply()); System.out.println("10 * 5 = " + context.executeStrategy(10, 5)); }
}
程序输出:
10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
4、总结
策略模式的重心不是如何实现算法,而是如何组织、调用这些算法;
策略模式一个很大的特色就是各个策略算法的平等性。对于一系列具体的策略算法,你们的地位是彻底同样的,正由于这个平等性,才能实现算法之间能够相互替换;
使用策略模式能够避免使用多重条件(if-else)语句;
免费Java高级资料须要本身领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G。
传送门:https://mp.weixin.qq.com/s/Jz...