目錄
- 一、 啥是策略模式?
- 二、 為什么要用策略模式?
- 三、 策略模式的實現方式
- 四、 策略模式的優缺點
- 五、 策略模式的應用場景
- 六、 總結
🌟我的其他文章也講解的比較有趣😁,如果喜歡博主的講解方式,可以多多支持一下,感謝🤗!
🌟了解模板方法模式請看: (十 三)趣學設計模式 之 模版方法模式!
?更多請看個人主頁: 碼熔burning
這篇文章帶你詳細認識一下設計模式中的策略模式
一、 啥是策略模式?
想象一下,你要去旅游 ??,可以選擇不同的交通方式:飛機 ??、火車 🚄、汽車 🚗。 你可以根據自己的需求和預算,選擇最合適的交通方式。
策略模式,就是用來解決算法選擇的問題! 它可以將算法封裝成獨立的策略類,并讓客戶端可以靈活地選擇不同的策略 🎁。
簡單來說,就是把不同的算法封裝起來,讓客戶端可以根據需要選擇不同的算法!
- 你需要使用不同的算法來解決同一個問題: 就像你需要使用不同的排序算法來排序數據 🔢!
- 你希望在運行時動態地選擇算法: 就像你需要根據不同的用戶選擇不同的推薦算法 🛍?!
- 你希望避免大量的 if-else 語句: 就像你需要根據不同的條件執行不同的操作 😫!
二、 為什么要用策略模式?
用策略模式,好處多多 👍:
- 提高代碼的靈活性: 可以動態地選擇不同的策略,使得代碼更加靈活 🤸!
- 提高代碼的可維護性: 將算法封裝成獨立的策略類,使得代碼更加清晰易懂 💡!
- 符合開閉原則: 可以在不修改現有代碼的情況下,增加新的策略,擴展功能 🆕!
- 避免大量的 if-else 語句: 使得代碼更加簡潔優雅 💫!
三、 策略模式的實現方式
策略模式主要包含三個核心概念:
- 策略接口(Strategy): 定義了策略的接口,聲明了所有策略都需要實現的方法 🤝!
- 具體策略類(ConcreteStrategy): 實現了策略接口,封裝了具體的算法 ??!
- 環境類(Context): 持有策略接口的引用,負責在運行時選擇并調用具體的策略 🏭!
// 策略接口:支付方式
public interface PaymentStrategy {void pay(int amount); // 支付
}// 具體策略類:支付寶支付
public class AlipayPayment implements PaymentStrategy {private String account; // 支付寶賬號public AlipayPayment(String account) {this.account = account;}@Overridepublic void pay(int amount) {System.out.println("使用支付寶賬號 " + account + " 支付 " + amount + " 元");}
}// 具體策略類:微信支付
public class WechatPayment implements PaymentStrategy {private String phone; // 微信綁定的手機號public WechatPayment(String phone) {this.phone = phone;}@Overridepublic void pay(int amount) {System.out.println("使用微信綁定的手機號 " + phone + " 支付 " + amount + " 元");}
}// 環境類:支付上下文
public class PaymentContext {private PaymentStrategy paymentStrategy; // 支付策略public PaymentContext(PaymentStrategy paymentStrategy) {this.paymentStrategy = paymentStrategy;}public void setPaymentStrategy(PaymentStrategy paymentStrategy) {this.paymentStrategy = paymentStrategy;}public void pay(int amount) {paymentStrategy.pay(amount); // 調用支付策略的支付方法}
}// 客戶端
public class Client {public static void main(String[] args) {// 創建支付上下文PaymentContext paymentContext = new PaymentContext(new AlipayPayment("1234567890")); // 默認使用支付寶支付// 支付paymentContext.pay(100); // 使用支付寶支付 100 元// 切換支付方式paymentContext.setPaymentStrategy(new WechatPayment("9876543210")); // 切換到微信支付// 再次支付paymentContext.pay(200); // 使用微信支付 200 元}
}
代碼解釋
PaymentStrategy
接口定義了支付策略的接口,聲明了pay
方法。AlipayPayment
類和WechatPayment
類實現了PaymentStrategy
接口,封裝了支付寶支付和微信支付的算法。PaymentContext
類是支付上下文,它持有PaymentStrategy
接口的引用,負責在運行時選擇并調用具體的支付策略。- 客戶端通過
PaymentContext
類選擇支付方式,并調用pay
方法進行支付。
輸出結果
使用支付寶賬號 1234567890 支付 100 元
使用微信綁定的手機號 9876543210 支付 200 元
四、 策略模式的優缺點
優點:
- 提高代碼的靈活性 🤸!
- 提高代碼的可維護性 💡!
- 符合開閉原則 🆕!
- 避免大量的 if-else 語句 💫!
缺點:
- 增加了類的數量 😫!
- 客戶端需要知道所有的策略 🤯!
五、 策略模式的應用場景
- 排序算法: 可以使用不同的排序算法來排序數據 🔢!
- 推薦算法: 可以根據不同的用戶選擇不同的推薦算法 🛍?!
- 支付方式: 可以選擇不同的支付方式進行支付 💰!
- 壓縮算法: 可以使用不同的壓縮算法來壓縮文件 🗜?!
六、 總結
- 策略模式就像選擇困難癥的福音,算法隨心換,策略任你挑! 🎁
- 核心概念包括策略接口、具體策略類和環境類! 🔑
- 優點是提高代碼的靈活性、提高代碼的可維護性、符合開閉原則、避免大量的 if-else 語句! 👍
- 缺點是增加了類的數量、客戶端需要知道所有的策略! 👎
- 適用于需要使用不同的算法來解決同一個問題,或者需要在運行時動態地選擇算法的場景! 🎯
希望這篇文章能讓你徹底理解策略模式! 💯 祝你學習愉快! 😄
看完請看:(十 五)趣學設計模式 之 命令模式!