概念
将每一种算法都封装到具有共同接口的独立类中,从而使他们可以相互替换
特点
功能特点:
算法在不影响客户端运行的情况下发生变化,从而改变不同功能(不同算法逻辑)。
设计特点:
1封装变化的部分
2针对接口编码,不针对具体实现编码
角色组成
1 抽象策略角色(A):接口或者抽象类,内含策略方法(算法)
2 具体策略角色:继承或者实现A,并实现策略方法(算法)
3 环境角色:持有一个策略类的引用
案例
实现加减乘除功能
1、定义抽象策略角色
//策略接口 public interface Strategy { public int calculate(int a,int b); }
2、定义具体策略角色(本例子仅仅演示,只是定义加、减两种具体策略)
加法策略:
//加法策略 public class AddStrategy() { public int calculate(int a,int b) { return a+b; } }
减法策略:
//减法策略 public class SubtractStrategy() { public int calculate(int a,int b) { return a-b; } }
3、环境角色
//环境角色 public class environmentRole { //策略对象 private Strategy stategy; public environmentRole(Strategy stategy) { this.stategy = stategy; } //get set 方法 }
int a = 10; int b = 8; //加法 //环境角色 environmentRole role = new environmentRole (new AddStrategy()); int result = role .calculate(a,b); //如果需要改变策略为减法 role.setStrategy(new SubtractStrategy()); result = role .calculate(a,b);
end