無廢話設計模式(13)行為型模式--策略模式
阿新 • • 發佈:2020-08-03
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 = newDiscountA(); 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、使用演算法的使用者不應只演算法的具體結構時;