zoukankan      html  css  js  c++  java
  • 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();
            }
        }
  • 相关阅读:
    BZOJ 2016十连测 D3T3序列
    Luogu3579 Solar Panels
    POI2014解题报告
    BZOJ4377 Kurs szybkiego czytania Luogu 3589[POI2015]KUR
    Luogu3587[POI2015]POD
    BZOJ4386[POI2015]Wycieczki / Luogu3597[POI2015]WYC
    BZOJ4381 : [POI2015]Odwiedziny / Luogu3591[POI2015]ODW
    HDU 1133 Buy the ticket
    HDU RPG的错排 【错排&&组合】
    【转】求逆元的n种方法
  • 原文地址:https://www.cnblogs.com/Tonyyang/p/1436234.html
Copyright © 2011-2022 走看看