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、使用算法的用户不应只算法的具体结构时;

  • 相关阅读:
    C/C++中extern关键字详解
    C/C++中static关键字详解
    MFC创建工程图解
    C++中L和_T()之区别
    C/C++中const关键字详解
    winfrom中,父窗体中只允许显示一个子窗体的代码怎么写?
    sql 批量插入
    visual studio .net ide : checking into source control now says checkIn Now (recursive)
    1.4 Turbo C V2.0的基本操作
    关于vs2003不能调试的解决方法
  • 原文地址:https://www.cnblogs.com/yanghj/p/13427928.html
Copyright © 2011-2022 走看看