【大話設計モード読書ノート・ポリシーモード】
3702 ワード
ポリシーモード
戦略モードはソフトウェア設計モードとして、オブジェクトにある行為を指すが、異なるシーンにおいて、この挙動は異なる実現アルゴリズムを有する.例えば、一人一人が「個人所得税を納める」ということですが、「米国で個人所得税を納める」と「中国で個人所得税を納める」は違います.策略のモードの特徴:1.一族の計算方法(業務規則)を定義しました.2.各アルゴリズムを実装しました.3.この族のアルゴリズムは互換可能です.ウィキペディア-ポリシーモード
戦略モデルはデパートの割引を実現します.
戦略モードはソフトウェア設計モードとして、オブジェクトにある行為を指すが、異なるシーンにおいて、この挙動は異なる実現アルゴリズムを有する.例えば、一人一人が「個人所得税を納める」ということですが、「米国で個人所得税を納める」と「中国で個人所得税を納める」は違います.策略のモードの特徴:1.一族の計算方法(業務規則)を定義しました.2.各アルゴリズムを実装しました.3.この族のアルゴリズムは互換可能です.ウィキペディア-ポリシーモード
戦略モデルはデパートの割引を実現します.
///
///
///
public abstract class CashSuper
{
public abstract double acceptCash(double money);
}
///
///
///
public class CashNormal : CashSuper
{
public override double acceptCash(double money)
{
return money;// ,
}
}
///
///
///
public class CashRebate : CashSuper
{
private double _moneyRebate = 1d;//
public CashRebate(double moneyRebate)
{
this._moneyRebate = moneyRebate;
}
public override double acceptCash(double money)
{
return money * _moneyRebate;
}
}
///
/// ( X , Y )
///
public class CashReturn : CashSuper
{
private double _moneyCondition = 0.0d;// X
private double _moneyReturn = 0.0d;// Y
public CashReturn(string moneyCondition, string moneyReturn)
{
this._moneyCondition = double.Parse(moneyCondition);
this._moneyReturn = double.Parse(moneyReturn);
}
public override double acceptCash(double money)
{
double result = money;
if (money >= _moneyCondition)
{
result = money - ((money / _moneyReturn) * _moneyReturn);//
}
return result;
}
}
///
///
///
public class CashFactory
{
public static CashSuper CreateCashAccept(string type)
{
CashSuper cashSuper = null;
switch (type)
{
case " ":
cashSuper = new CashNormal();
break;
case " 300 100":
cashSuper = new CashReturn("300", "100");
break;
case " ":
cashSuper = new CashRebate(0.8);
break;
}
return cashSuper;
}
}
///
///
///
public class CashContext
{
private readonly CashSuper cash;
///
///
///
///
public CashContext(string type)
{
switch (type)
{
case " ":
cash = new CashNormal();
break;
case " 300 100":
cash = new CashReturn("300", "100");
break;
case " ":
cash = new CashRebate(0.8);
break;
}
}
///
///
///
///
///
public double GetResult(double money)
{
if (cash != null) return cash.acceptCash(money);
return -1;
}
}
クライアントの呼び出し var cash = new CashContext(" ");//
var result = cash.GetResult(500);
Console.WriteLine(result);
Console.ReadLine();
転載先:https://www.cnblogs.com/q975261413/p/8117869.html