无废话设计模式(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、使用算法的用户不应只算法的具体结构时;

原文地址:https://www.cnblogs.com/yanghj/p/13427928.html