模式概述
策略模式是一種行為型設計模式,它通過定義一系列可互換的算法,并將每個算法封裝成獨立類,使客戶端能夠根據需要動態切換算法
簡單代碼示例
// 1. 抽象策略接口
interface PaymentStrategy {void pay(int amount);
}// 2. 具體策略實現
class CreditCardPayment implements PaymentStrategy {@Overridepublic void pay(int amount) {System.out.println("信用卡支付: " + amount + "元");}
}class AlipayPayment implements PaymentStrategy {@Overridepublic void pay(int amount) {System.out.println("支付寶支付: " + amount + "元");}
}// 3. 環境類(持有策略引用)
class PaymentContext {private PaymentStrategy strategy;public void setStrategy(PaymentStrategy strategy) {this.strategy = strategy;}public void executePayment(int amount) {strategy.pay(amount);}
}// 客戶端調用
public class Client {public static void main(String[] args) {PaymentContext context = new PaymentContext();// 動態切換策略context.setStrategy(new CreditCardPayment());context.executePayment(100); // 輸出:信用卡支付: 100元context.setStrategy(new AlipayPayment());context.executePayment(200); // 輸出:支付寶支付: 200元}
}
技術細節
1.模式組成
組件 | 職責說明 |
---|---|
抽象策略類 | 定義算法的公共接口,聲明策略方法 |
具體策略類 | 實現抽象策略接口,提供具體算法實現 |
環境類 | 持有策略對象的引用,通過委托調用具體算法 |
2.優缺點
優點:
- 符合開閉原則,新增策略無需修改已有代碼
- 避免多重條件判斷(如if-else分支)
- 算法復用,相同策略可被不同上下文使用
缺點:
- 會產生大量小對象,增加系統復雜性
- 多層裝飾時調試困難
模式應用
事務管理(PlatformTransactionManager)
策略接口:
- PlatformTransactionManager
具體策略:
-
DataSourceTransactionManager(JDBC事務)
-
JpaTransactionManager(JPA事務)
-
JtaTransactionManager(分布式事務)