php实现策略模式
策略模式简介
策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。它将算法封装成独立的类,使得它们可以相互替换,而不影响客户端代码。
实现步骤
定义策略接口
创建一个接口或抽象类,定义所有具体策略必须实现的方法。
interface PaymentStrategy {
public function pay(float $amount): void;
}
实现具体策略类
创建实现接口的具体策略类,每个类代表一种算法或行为。
class CreditCardPayment implements PaymentStrategy {
public function pay(float $amount): void {
echo "Paying $amount via Credit Card.\n";
}
}
class PayPalPayment implements PaymentStrategy {
public function pay(float $amount): void {
echo "Paying $amount via PayPal.\n";
}
}
创建上下文类
上下文类维护一个策略对象的引用,并通过策略接口与具体策略交互。
class PaymentContext {
private PaymentStrategy $strategy;
public function __construct(PaymentStrategy $strategy) {
$this->strategy = $strategy;
}
public function executePayment(float $amount): void {
$this->strategy->pay($amount);
}
}
客户端使用
在运行时动态切换策略。
$amount = 100.0;
// 使用信用卡支付
$context = new PaymentContext(new CreditCardPayment());
$context->executePayment($amount);
// 切换到 PayPal 支付
$context = new PaymentContext(new PayPalPayment());
$context->executePayment($amount);
优势
- 灵活性:算法可以独立于客户端变化。
- 可扩展性:新增策略无需修改现有代码。
- 避免条件语句:减少复杂的条件分支逻辑。
适用场景
- 需要动态切换算法或行为。
- 存在多种相似逻辑,仅实现细节不同。
- 不希望暴露复杂算法细节给客户端。







