Strategy——策略模式

一、模式概述
策略模式(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();
        }
    }
原文地址:https://www.cnblogs.com/Tonyyang/p/1436234.html