java设计模式 -【策略模式】
策略模式定义
策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。它将算法封装成独立的类,使得它们可以相互替换,而不影响客户端代码。
核心组成
Context(上下文):持有一个策略对象的引用,负责调用策略的具体实现。
Strategy(策略接口):定义所有支持的算法或行为的公共接口。
ConcreteStrategy(具体策略):实现策略接口的具体算法或行为。
实现示例(Java代码)
// 策略接口 interface PaymentStrategy { void pay(int amount); } // 具体策略:信用卡支付 class CreditCardPayment implements PaymentStrategy { private String cardNumber; public CreditCardPayment(String cardNumber) { this.cardNumber = cardNumber; } @Override public void pay(int amount) { System.out.println(\"Paid \" + amount + \" via Credit Card: \" + cardNumber); } } // 具体策略:支付宝支付 class AlipayPayment implements PaymentStrategy { private String account; public AlipayPayment(String account) { this.account = account; } @Override public void pay(int amount) { System.out.println(\"Paid \" + amount + \" via Alipay: \" + account); } } // 上下文类 class ShoppingCart { private PaymentStrategy paymentStrategy; public void setPaymentStrategy(PaymentStrategy strategy) { this.paymentStrategy = strategy; } public void checkout(int amount) { paymentStrategy.pay(amount); } } // 客户端代码 public class Main { public static void main(String[] args) { ShoppingCart cart = new ShoppingCart(); cart.setPaymentStrategy(new CreditCardPayment(\"1234-5678-9012\")); cart.checkout(100); cart.setPaymentStrategy(new AlipayPayment(\"user@example.com\")); cart.checkout(200); } }
适用场景
需要动态切换算法或行为时(如支付方式、排序算法)。
避免多重条件判断(如大量的 if-else 或 switch 语句)。
需要隔离算法逻辑与客户端代码。