这一节主要说明下策略模式的使用。同样,我们模拟计算器的场景。和简单工厂模式相比,只是对简单工厂模式的工厂进行了一点修改。简单工厂模式请点击这里,这里主要看下修改的部分。
package com.yjck.strategy;
/**
* 策略模式
* 这个类根据操作类型的不同可以自由生成相应的处理类
*/
public class Factory {
private Operation operation = null;
public Factory(String opt){
if("+".equals(opt)){
operation = new OperationAdd();
}
if("-".equals(opt)){
operation = new OperationSub();
}
if("*".equals(opt)){
operation = new OperationMul();
}
if("/".equals(opt)){
operation = new OperationDiv();
}
}
/**
* 对计算方法的提取封装
* @param a
* @param b
* @return
*/
public double getResult(double a,double b){
return operation.getResult( a, b);
}
}
客户端的修改
package com.yjck.strategy;
public class Run {
/**
* 主类,程序入口
*/
public static void main(String[] args) {
Factory factory = new Factory("+");
double result = factory.getResult(1.00, 5.33);
System.out.println(result);
}
/**
* ********下面这些话是对策略模式的总结********
* 和简单工厂模式相比,策略模式只是对简单工厂模式进行了修改,
* 主要的修改了factory,增加了自己的方法getResutl()。
* 并在构造方法中对具体实现类进行了构造。这样在客户单调用的
* 时候我们只出现了Factory类,并没有出现具体计算方法类的父类
* Operation,而简单工厂模式除了计算方法类的父类外,还有Factory
* 类。在策略模式中的计算方法的父类又进行了封装,进一步解耦,实际
* 上就是对方法的封装。
* ***********************************************
*/
}