策略模式 就是把业务逻辑和算法分开
好处:可以额外添加一些处理,屏蔽客户端对算法的依赖
缺点:上端必须知道所有的算法,并负责选择算法
构成:一个策略环境 一个抽象策略和一大堆子策略
下面模拟一个简单计算器的代码
抽象策略代码
public abstract class BaseCalculation
{
public int leftInput;
public int rightInput;
public abstract int Calculation();
}
一大堆子策略 就是加减乘除的算法
public class jia:BaseCalculation
{
public override int Calculation()
{
return leftInput + rightInput;
}
}
public class jian:BaseCalculation
{
public override int Calculation()
{
return leftInput - rightInput;
}
}
public class cheng:BaseCalculation
{
public override int Calculation()
{
return leftInput * rightInput;
}
}
public class chu:BaseCalculation
{
public override int Calculation()
{
return leftInput / rightInput;
}
}
策略环境代码
public class Context
{
private BaseCalculation _Calculation = null;
public Context(BaseCalculation calculation)
{
_Calculation = calculation;
}
public int Calculation(int leftinput,int rightinput)
{
_Calculation.leftInput = leftinput;
_Calculation.rightInput = rightinput;
return _Calculation.Calculation();
}
}
//模拟用户输入两个数字和一个运算符
int ileft = 1;
int iright = 2;
string Operator = "+";
//模拟计算器
int Operationresult;
switch (Operator)
{
case "+":
{
BaseCalculation b = new jia();
Context con = new Context(b);
Operationresult = con.Calculation(ileft, iright);
}
break;
case "-":
{
BaseCalculation b = new jian();
Context con = new Context(b);
Operationresult = con.Calculation(ileft, iright);
}
break;
case "*":
{
BaseCalculation b = new cheng();
Context con = new Context(b);
Operationresult = con.Calculation(ileft, iright);
}
break;
case "/":
{
BaseCalculation b = new chu();
Context con = new Context(b);
Operationresult = con.Calculation(ileft, iright);
}
break;
default:
Operationresult = 0;
//抛异常 就不写了
break;
}
Console.WriteLine("{0}{1}{2}={3}", ileft, Operator, iright, Operationresult);
结果