策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使得它们可以互相替换。策略模式使得算法的变化独立于使用算法的客户端。

以下是一个简单的 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