【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号