策略模式是一種行為型設計模式,允許在運行時動態選擇算法策略。在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開發中非常實用的一種設計模式,特別適用於行為多變的系統設計。通過合理運用策略模式,可以有效提升代碼的結構性和可維護性,降低系統複雜度,提升開發效率。