設計模式是在軟件開發中被廣泛驗證的解決方案,它能幫助我們構建出可維護、可擴展且高複用的代碼結構。在PHP 中應用設計模式,不僅能提升代碼質量,還能讓系統在面對複雜業務需求時更具彈性。
設計模式一般分為三類:創建型、結構型和行為型。每一類都有不同的側重點與使用場景。
創建型模式用於封裝對象的創建過程,使代碼與具體類解耦。常見的創建型模式包括:
結構型模式關注類與對象之間的組合方式,旨在讓系統更加靈活與易維護。常見的結構型模式包括:
行為型模式用於描述對象之間的通信方式及職責分配。主要模式包括:
以下示例展示了設計模式在購物車系統中的實際應用,包括工廠模式、代理模式和策略模式。
interface DiscountServiceFactory {
public static function create(): DiscountService;
}
class NormalDiscountService implements DiscountService {
// ...
}
class PremiumDiscountService implements DiscountService {
// ...
}
class DiscountServiceFactoryImpl implements DiscountServiceFactory {
public static function create(): DiscountService {
if (isPremiumCustomer()) {
return new PremiumDiscountService();
}
return new NormalDiscountService();
}
}
通過工廠模式,我們可以靈活地根據用戶類型創建不同的折扣服務實例,而不直接依賴具體類。
class CartLoggerProxy extends Cart {
private $logger;
public function __construct(Cart $cart, Logger $logger) {
parent::__construct();
$this->cart = $cart;
$this->logger = $logger;
}
public function addItem(Item $item): void {
parent::addItem($item);
$this->logger->log("Added item to cart");
}
// 其他方法可類似擴展
}
代理模式通過中間層(Proxy)增強了原有類的功能,如增加日誌記錄或權限控制。
interface DiscountStrategy {
public function calculateDiscount(Cart $cart): float;
}
class NoDiscountStrategy implements DiscountStrategy {
public function calculateDiscount(Cart $cart): float {
return 0;
}
}
class FlatDiscountStrategy implements DiscountStrategy {
private $discount;
public function __construct(float $discount) {
$this->discount = $discount;
}
public function calculateDiscount(Cart $cart): float {
return $cart->getTotal() * $this->discount;
}
}
// 應用策略
$context = new DiscountContext();
if (isPremiumCustomer()) {
$context->setStrategy(new PremiumDiscountStrategy());
} else {
$context->setStrategy(new NoDiscountStrategy());
}
$discount = $context->calculateDiscount();
策略模式讓不同的折扣算法可以自由切換,從而提高了系統的靈活性與可擴展性。
設計模式不僅僅是編程技巧,更是一種思想。通過合理地運用工廠、代理和策略等模式,我們能夠讓PHP 項目結構更加清晰、靈活,並在復雜場景下保持良好的可維護性。掌握這些模式,將為你的PHP 開發之路奠定堅實的基礎。