美文网首页
策略模式

策略模式

作者: 该死的金箍 | 来源:发表于2024-03-18 15:40 被阅读0次

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

策略模式通常包括三个角色:
环境(Context):它持有一个策略对象的引用,并在需要时调用策略对象执行算法。
策略(Strategy):它是一个接口或者抽象类,定义了一个算法族的接口。
具体策略(Concrete Strategy):它实现了策略接口,提供了具体的算法实现。

// 定义支付策略接口
interface PaymentStrategy {
    public function calculatePaymentAmount($amount);
}
// 具体支付策略类:信用卡支付
class CreditCardPaymentStrategy implements PaymentStrategy {
    public function calculatePaymentAmount($amount) {
        // 假设信用卡支付有 5% 的手续费
        return $amount * 1.05;
    }
}
// 具体支付策略类:支付宝支付
class AlipayPaymentStrategy implements PaymentStrategy {
    public function calculatePaymentAmount($amount) {
        // 假设支付宝支付有 1% 的手续费
        return $amount * 1.01;
    }
}
// 订单类(环境)
class Order {
    private $paymentStrategy;
    public function __construct(PaymentStrategy $paymentStrategy) {
        $this->paymentStrategy = $paymentStrategy;
    }
    public function calculateTotalPayment($amount) {
        return $this->paymentStrategy->calculatePaymentAmount($amount);
    }
}
// 客户端代码
$order1 = new Order(new CreditCardPaymentStrategy());
$order2 = new Order(new AlipayPaymentStrategy());
echo "Order 1 total payment: " . $order1->calculateTotalPayment(100) . "\n";
echo "Order 2 total payment: " . $order2->calculateTotalPayment(100) . "\n";

相关文章

网友评论

      本文标题:策略模式

      本文链接:https://www.haomeiwen.com/subject/pcgpzdtx.html