zoukankan      html  css  js  c++  java
  • 无废话设计模式(13)行为型模式--策略模式

    0-前言

      策略模式定义:定义了算法家族,分别封装起来,让他们之间可以相互替换,

                此模式让算法的变化,不会影响到使用算法的客户;

    1-实现

    1-1、简单UML图:

    1-2、代码实现:

    //1、抽象父类
    abstract  class Discount
    {
        abstract double GetDiscount();
    }
    
    //2-1、具体算法A
    class  DiscountA extends Discount
    {
        @Override
        double GetDiscount()
        {
            return 5;
        }
    }
    
    //2-2、具体算法B
    class  DiscountB extends Discount
    {
        @Override
        double GetDiscount()
        {
            return 10;
        }
    }
    
    //3、上下文类
    class  DiscountContext
    {
        Discount discount;
        public DiscountContext(int type)
        {
            switch (type)
            {
                case 1:
                     this.discount = new DiscountA();
                     break;
                case 2:
                    this.discount = new DiscountB();
                    break;
                    default:
                        this.discount = new DiscountA();
                        break;
            }
    
        }
    
        public  double getAllDicount()
        {
           return discount.GetDiscount();
        }
    }

    客户端:

            double discount;
            DiscountContext discountContext;
             discountContext = new DiscountContext(1);
            discount = discountContext.getAllDicount();
            System.out.println("算法A下,你当前可以享受的优惠金额为:" + discount);
    
            discountContext = new DiscountContext(2);
            discount = discountContext.getAllDicount();
            System.out.println("算法B下,你当前可以享受的优惠金额为:" + discount);

    运行结果:

    2-应用场景简单总结

    1、很多相关类(算法)只是在行为上有差异;

    2、当需要使用一个算法的不同变体时;

    3、使用算法的用户不应只算法的具体结构时;

  • 相关阅读:
    (剑指offer)斐波那契数列
    手写Vue源码 watch的实现
    Vue源码之异步批量任务更新
    手写Vue源码之 依赖收集
    C# 测试代码#if DEBUG使用
    shell脚本编程相关7
    C#中关于ref和out的认识
    shell脚本编程相关6
    shell脚本编程相关5
    shell脚本编程相关4
  • 原文地址:https://www.cnblogs.com/yanghj/p/13427928.html
Copyright © 2011-2022 走看看