程式設計模式 - 策略模式 (Strategy Pattern)

定義: 

一種軟體設計模式,指對象有某個行爲,但是在不同的場景中,該行爲有不同的實現算法。比如每個人都要「交個人所得稅」,但是「在美國交個人所得稅」和「在中華民國交個人所得稅」就有不同的算稅方法。

策略模式:

  • 定義了一族算法(業務規則);
  • 封裝了每個算法;
  • 這族的算法可互換代替(interchangeable)。


範例:

// 所得稅計算策略
public interface ITaxStragety
{
    double CalculateTax(double income);
}

 // 個人所得稅
public class PersonalTaxStrategy : ITaxStragety
{
    public double CalculateTax(double income)
    {
        return income * 0.12;
    }
}

// 企業所得稅
public class EnterpriseTaxStrategy : ITaxStragety
{
    public double CalculateTax(double income)
    {
        return (income - 3500) > 0 ? (income - 3500) * 0.045 : 0.0;
    }
}

public class InterestOperation
{
    private ITaxStragety m_strategy;
    public InterestOperation(ITaxStragety strategy)
    {
        this.m_strategy = strategy;
    }

    public double GetTax(double income)
    {
        return m_strategy.CalculateTax(income);
    }
}

//執行:

// 個人所得稅方式
InterestOperation operation = new InterestOperation(new PersonalTaxStrategy());
Console.WriteLine("個人支付的稅為:{0}", operation.GetTax(5000.00));

// 企業所得稅
operation = new InterestOperation(new EnterpriseTaxStrategy());
Console.WriteLine("企業支付的稅為:{0}", operation.GetTax(50000.00));

Console.Read();

參考資料:
https://www.796t.com/article.php?id=229223
https://zh.wikipedia.org/wiki/%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F

留言

熱門文章