1. 程式人生 > >C#機房重構-下機(策略模式)

C#機房重構-下機(策略模式)

策略模式

策略模式UML圖
策略模式:定義演算法家族,分別封裝,讓它們之間可以相互替換,此模式計演算法的變化,不會影響到使用演算法的客戶。策略模式封裝了變化,只要在分析過程中聽到需要在不同時間應用不同的業務規則,就可以考慮使用策略模式

具體實現

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來承擔。