策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装到独立的类中,并使它们可以互相替换。策略模式可以让算法的变化独立于使用算法的客户端。
策略模式通常包括三个角色:
环境(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";
网友评论