策略模式 就是把業務邏輯和算法分開
好處:可以額外添加一些處理,屏蔽客戶端對算法的依賴
缺點:上端必須知道所有的算法,並負責選擇算法
構成:一個策略環境 一個抽象策略和一大堆子策略
下面模擬一個簡單計算器的代碼
抽象策略代碼
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);
結果