C#機房重構-下機(策略模式)
阿新 • • 發佈:2019-01-04
策略模式 |
策略模式:定義演算法家族,分別封裝,讓它們之間可以相互替換,此模式計演算法的變化,不會影響到使用演算法的客戶。策略模式封裝了變化,只要在分析過程中聽到需要在不同時間應用不同的業務規則,就可以考慮使用策略模式
具體實現 |
Context類
public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public Line_info ContextInterface(Entity.Line_info line) { strategy.Getconsum(line); return line; } }
抽象類,定義抽象方法
public abstract class Strategy//策略抽象類
{
//定義一個獲得消費金額的抽象方法
public abstract Line_info Getconsum(Entity.Line_info line);
}
具體演算法或行為1
public class Strategyone : Strategy//具體策略類1 { public override Line_info Getconsum(Entity.Line_info line)//臨時使用者消費金額 { //獲取臨時使用者單位消費金額 line.Consume = line.ConsumeTime * line.tmpRate; return line; } }
具體演算法或行為2
public class Strategytwo : Strategy//具體策略類2
{
public override Line_info Getconsum(Line_info line)//固定使用者消費金額
{
//獲取固定使用者單位消費金額
line.Consume = line.ConsumeTime * line.Rate;
return line;
}
}
BLL層
string type = line.Type; switch (type) { case "固定使用者": Context context = new Context(new Strategyone()); line=context.ContextInterface(line); break; case "臨時使用者": Context context1 = new Context(new Strategytwo()); line=context1.ContextInterface(line); break; }
總結 |
選擇所有具體實現的職責是由客戶端物件承擔的,並轉給策略模式的Context物件。可以通過策略模式和簡單工廠結合,將選擇具體實現的職責由Context來承擔。