概念:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
下面用一个工厂模式和策略模式的对比进行说明策略模式
工厂模式:
public interface Operation {
double GetResult(double a,double b);
}
public class AddOperation implements Operation {
public double GetResult(double a, double b) {
return a+b;
}
}
public class SubOperation implements Operation {
public double GetResult(double a, double b) {
return a-b;
}
}
public class factory {
public static Operation creat(char c){
Operation op = null;
switch(c){
case '+':
op = new AddOperation();
break;
case '-':
op = new subOperation();
break;
default:
op = new AddOperation();
break;
}
return op;
}
}
public class Test {
public static void main(String[] args) {
Operation op = factory.creat('+');
System.out.println(op.GetResult(1.1, 2.2));
op = factory.creat('-');
System.out.println(op.GetResult(1.1, 2.2));
}
}
策略模式:
public interface Operation {
double getResult(double a,double b);
}
public class AddOperation implements Operation {
public double getResult(double a, double b) {
return a+b;
}
}
public class SubOperation implements Operation {
public double getResult(double a, double b) {
return a-b;
}
}
public class Strategy {
Operation op;
public Strategy(Operation op){
this.op = op;
}
public double getResult(double a,double b){
return op.getResult(a, b);
}
}
public class Test {
public static void main(String[] args) {
AddOperation addOp = new AddOperation();
SubOperation subOp = new SubOperation();
Strategy addStrategy = new Strategy(addOp);
System.out.println(addStrategy.getResult(1.1, 2.2));
Strategy subStrategy = new Strategy(subOp);
System.out.println(subStrategy.getResult(1.1, 2.2));
}
}