• CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)


    策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。

    模式角色与结构:

    示例代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace CSharp.DesignPattern.StrategyPattern
    {
        class Program
        {
            static void Main(string[] args)
            {
                MovieTicket mt = new MovieTicket();
                double originalPrice = 60.0;
                double currentPrice;
    
                mt.Price = originalPrice;
    
                IDiscount discount = new StudentDiscount(); // 也可以用配置文件和反射创建新的对象
                mt.Discount = discount; // 注入折扣对象
    
                currentPrice = mt.GetCurrentPrice();
                Console.Write("student price: " + currentPrice.ToString());
            }
        }
    
        // 环境类
        class MovieTicket
        {
            public double GetCurrentPrice()
            {
                return _discount.calculate(this._price);
            }
    
            public double Price
            {
                get { return _price; }
                set { _price = value; }
            }
    
            public IDiscount Discount
            {
                set { _discount = value; }
            }
    
            private double _price;
            private IDiscount _discount; // 维持一个对抽象策略类的引用
        }
    
        // 抽象策略类  
        interface IDiscount
        {
            double calculate(double price);
        }
    
        // 具体策略类
        class StudentDiscount : IDiscount
        {
            public double calculate(double price)
            {
                return price * 0.8;
            }
        }
    
        // 具体策略类
        class ChildrenDiscount : IDiscount
        {
            public double calculate(double price)
            {
                return price - 10;
            }
        }
    
        // 具体策略类
        class VIPDiscount : IDiscount
        {
            public double calculate(double price)
            {
                return price * 0.5;
            }
        }
    }
  • 相关阅读:
    作用域链
    traceback
    mac安装sshpass
    awk
    bond
    sqlx
    svn
    JS对象合并方法
    echarts图形超出宽度限制范围
    笔记本连接4K显示器鼠标问题
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993799.html
Copyright © 2020-2023  润新知