【Java】23種設計模式——13.策略模式
定義
策略模式(Strategy Pattern)是一種行為型設計模式,它定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶端。
角色
- 環境(Context):持有一個策略類的引用,提供給客戶端調用
- 抽象策略(Strategy):定義所有支持的算法的公共接口
- 具體策略(ConcreteStrategy):實現抽象策略定義的接口,提供具體算法
應用場景
- 需要動態的在幾種算法中選擇一種的時候
- 一個類定義了多種行為,且這些行為以多條件語句形式出現
- 系統需要安全地封裝不同類型的算法
- 當算法需要自由切換時
使用
支付方法自由切換(信用卡支付和支付寶支付)
-
抽象策略 (支付方式)
/** * 抽象策略 : 支付策略 * @Author:lyj * @Date:2025/5/19 17:24 */ public interface PaymentStrategy { /** * 支付 * @param amount 金額 */ public void pay(int amount); } -
具體策略 (信用卡支付、支付寶支付)
/** * 具體策略 : 信用卡支付 * @Author:lyj * @Date:2025/5/19 17:27 */ public class CredCardStrategy implements PaymentStrategy { private String cardNumber; // 卡號 public CredCardStrategy(String cardNumber) { this.cardNumber = cardNumber; } /** * 支付 * @param amount 金額 */ @Override public void pay(int amount) { System.out.println("信用卡支付" + amount + "元,卡號:" + cardNumber); } }/** * 具體策略 : 支付寶支付 * @Date:2025/5/19 17:28 */ public class AlipayStrategy implements PaymentStrategy{ private String account; // 賬號 public AlipayStrategy(String account) { this.account = account; } @Override public void pay(int amount) { System.out.println("支付寶支付了" + amount + "元,賬號為:" + account); } } -
**環境 ** (支付選擇)
/** * 環境類 :·支付選擇 * @Author:lyj * @Date:2025/5/19 17:30 */ public class ShoppingCart { private PaymentStrategy paymentStrategy; // 支付策略 /** * 設置支付策略 * @param paymentStrategy 支付策略 */ public void setPaymentStrategy(PaymentStrategy paymentStrategy) { this.paymentStrategy = paymentStrategy; } /** * 運行支付 * @param amount 金額 */ public void checkOut(int amount) { paymentStrategy.pay(amount); } }
客戶端: 運行支付測試
ShoppingCart cart = new ShoppingCart();
// 支付寶支付
cart.setPaymentStrategy(new AlipayStrategy("1234-5678-9012-2456"));
cart.checkOut(100); // 支付寶支付了100元,賬號為:1234-5678-9012-2456
// 信用卡支付
cart.setPaymentStrategy(new CredCardStrategy("1234-5678-9012-3456"));
cart.checkOut(200); //信用卡支付200元,卡號:1234-5678-9012-3456
有志者,事竟成,破釜沉舟,百二秦關終屬楚; 苦心人,天不負,臥薪嘗膽,三千越甲可吞吳。

浙公網安備 33010602011771號