简介:在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
策略模式和状态模式比较类似。
下面的代码中,“策略”就是对数组的处理方式,不同的策略下,对数组的处理方式也不同。
/**
*定义一个策略的抽象类,用于对数组进行处理
*/
public abstract class Strategy {
abstract int result(int [] arr);
}
/**
*取最大值策略
*/
class Max extends Strategy{
@Override
public int result(int[] arr) {
Arrays.sort(arr);
return arr[arr.length-1];
}
}
/**
*取最小值策略
*/
class Min extends Strategy{
@Override
int result(int[] arr) {
Arrays.sort(arr);
return arr[0];
}
}
/**
*取平均数策略
*/
class AVG extends Strategy{
@Override
int result(int[] arr) {
int max=0;
int length=arr.length;
if(length>0){
for (int i : arr) {
max+=i;
}
return max/length;
}else{
return 0;
}
}
}
/**
*创建Context类,需要拥有Strategy类的实例
*/
class Context{
private Strategy strategy;
private int[] arr;
public Context(Strategy strategy, int[] arr) {
super();
this.strategy = strategy;
this.arr = arr;
}
public void getResult(){
int result=strategy.result(arr);
System.err.println("计算结果是:"+result);
}
}
主方法:
public class Main {
public static void main(String arrs[]) {
int[] arr=new int[]{1,2,3,4,5,6,7,8,9};
//最大值
Context cts=new Context(new Max(), arr);
cts.getResult();
//最小值
cts=new Context(new Min(), arr);
cts.getResult();
//平均数
cts=new Context(new AVG(), arr);
cts.getResult();
}
}
运行结果:
计算结果是:9
计算结果是:1
计算结果是:5