一、模式概述
策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同。其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法。
计算个人所得税和企业所得税
二.
据上面UML,不难看出,在策略模式里主要有三种角色:环境角色、抽象策略角色和具体策略角色。
环境(Context)角色:持有一个抽象策略(Strategy)角色的引用。也叫上下文。
抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或一个抽象类来实现。
具体策略(ConcreteStrategy)角色:包装了相应的算法和行为。
三.Code实现
public interface ITaxStrategy
{
double Calculate(double income);
}
public class PersonalTaxStrategy : ITaxStrategy
{
public double Calculate(double income)
{
return income * 0.1;
}
}
public class EnterpriseTaxStrategy : ITaxStrategy
{
public double Calculate(double income)
{
return income * 0.5;
}
}
public class TaxOp
{
private ITaxStrategy m_strategy;
public TaxOp(ITaxStrategy strategy)
{
m_strategy = strategy;
}
public double GetTax(double income)
{
return m_strategy.Calculate(income);
}
}
class Program
{
static void Main(string[] args)
{
TaxOp op = new TaxOp(new PersonalTaxStrategy());
Console.WriteLine("The Personal Tax is :{0}", op.GetTax(1000));
Console.Read();
}
}