設計模式是 PHP 中用於建立可維護、可擴展且可重複使用的程式碼的經過驗證的解決方案。基本設計模式可分為創建型、結構型、行為型。實戰案例展示了設計模式在購物車系統中的應用,包括使用工廠模式建立折扣服務對象,使用代理模式為購物車添加日誌功能,以及透過策略模式實現各種折扣計算。
PHP 設計模式:從入門到精通
引言
##設計模式是經過驗證的程式碼解決方案,可用於解決常見程式設計問題。在 PHP 中,設計模式可以幫助我們編寫可維護、可擴充且可重複使用的程式碼。基本設計模式
建立型模式:提供建立物件的機制。
結構型模式:定義類別和物件之間的關係。
行為型模式:定義物件如何通訊和協作。
實戰案例:購物車
考慮一個購物車系統,其中包含以下類別::表示購物車,存放購買的物品。
:表示購物車中的單一物品。
:提供運算折扣的介面。
使用工廠模式建立DiscountService 物件:
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(); } }
使用代理模式為Cart 添加日誌功能:
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"); } // 其他方法类似处理 }
透過策略模式實現各種折扣計算:
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 設計模式從入門到精通的詳細內容。更多資訊請關注PHP中文網其他相關文章!