1. 程式人生 > 實用技巧 >無廢話設計模式(13)行為型模式--策略模式

無廢話設計模式(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、使用演算法的使用者不應只演算法的具體結構時;