以下是一个简单的 PHP 策略模式的示例:
<?php
// 策略接口
interface PaymentStrategy {
public function pay($amount);
}
// 具体策略类1
class CreditCardPayment implements PaymentStrategy {
private $cardNumber;
public function __construct($cardNumber) {
$this->cardNumber = $cardNumber;
}
public function pay($amount) {
echo "Paid $amount via credit card (Card Number: $this->cardNumber)\n";
}
}
// 具体策略类2
class PayPalPayment implements PaymentStrategy {
private $email;
public function __construct($email) {
$this->email = $email;
}
public function pay($amount) {
echo "Paid $amount via PayPal (Email: $this->email)\n";
}
}
// 上下文类
class ShoppingCart {
private $paymentStrategy;
public function setPaymentStrategy(PaymentStrategy $paymentStrategy) {
$this->paymentStrategy = $paymentStrategy;
}
public function checkout($amount) {
$this->paymentStrategy->pay($amount);
}
}
// 客户端代码
$cart = new ShoppingCart();
// 使用信用卡支付
$creditCardPayment = new CreditCardPayment("1234-5678-9012-3456");
$cart->setPaymentStrategy($creditCardPayment);
$cart->checkout(100);
// 使用PayPal支付
$paypalPayment = new PayPalPayment("john.doe@example.com");
$cart->setPaymentStrategy($paypalPayment);
$cart->checkout(50);
在这个例子中,PaymentStrategy 接口定义了支付策略的基本方法 pay。CreditCardPayment 和 PayPalPayment 是具体的支付策略类,分别实现了信用卡支付和PayPal支付的逻辑。
ShoppingCart 类是上下文类,包含一个对当前支付策略的引用,并提供了一个用于执行支付操作的方法 checkout。客户端代码创建了一个购物车对象,并通过设置不同的支付策略来执行支付操作。
策略模式使得支付策略的变化对客户端透明,客户端只需要关心使用正确的支付策略即可。这有助于减少代码的耦合度,使得系统更加灵活和可扩展。
转载请注明出处:http://www.pingtaimeng.com/article/detail/11962/PHP