策略模式是一种行为型设计模式,允许在运行时动态选择算法策略。在PHP中,使用策略模式可以有效实现逻辑的解耦,提升代码的灵活性与可维护性。该模式遵循开放-封闭原则,即对扩展开放,对修改封闭。
以电商平台为例,不同等级的用户享有不同的折扣策略:普通用户无折扣、VIP用户9折、SVIP用户8折。我们可以通过策略模式,将每种定价策略封装成独立的类,便于管理和扩展。
abstract class PriceStrategy {
abstract public function calculatePrice($price);
}
针对不同用户等级,创建三个继承自 PriceStrategy 的类:
class RegularStrategy extends PriceStrategy {
public function calculatePrice($price) {
return $price;
}
}
class VipStrategy extends PriceStrategy {
public function calculatePrice($price) {
return $price * 0.9;
}
}
class SvipStrategy extends PriceStrategy {
public function calculatePrice($price) {
return $price * 0.8;
}
}
订单类通过设置策略对象,实现灵活的价格计算:
class Order {
private $priceStrategy;
public function setPriceStrategy(PriceStrategy $strategy) {
$this->priceStrategy = $strategy;
}
public function calculateTotalPrice($price) {
return $this->priceStrategy->calculatePrice($price);
}
}
我们可以根据用户等级动态选择策略类:
$order = new Order();
$regularStrategy = new RegularStrategy();
$order->setPriceStrategy($regularStrategy);
$regularPrice = $order->calculateTotalPrice(100); // 输出100
$vipStrategy = new VipStrategy();
$order->setPriceStrategy($vipStrategy);
$vipPrice = $order->calculateTotalPrice(100); // 输出90
$svipStrategy = new SvipStrategy();
$order->setPriceStrategy($svipStrategy);
$svipPrice = $order->calculateTotalPrice(100); // 输出80
通过策略模式,不同的业务规则被封装成独立类,使核心逻辑更加清晰,具备良好的扩展性。当新增一个用户等级策略时,只需添加一个新的策略类,无需改动现有代码。
策略模式是PHP开发中非常实用的一种设计模式,特别适用于行为多变的系统设计。通过合理运用策略模式,可以有效提升代码的结构性和可维护性,降低系统复杂度,提升开发效率。