Designmuster sind bewährte Lösungen in PHP zum Erstellen wartbaren, skalierbaren und wiederverwendbaren Codes. Grundlegende Entwurfsmuster können in kreative, strukturelle und verhaltensbezogene Muster unterteilt werden. Praktische Beispiele demonstrieren die Anwendung von Entwurfsmustern im Warenkorbsystem, einschließlich der Verwendung des Fabrikmusters zum Erstellen von Rabattdienstobjekten, der Verwendung des Proxy-Musters zum Hinzufügen von Protokollierungsfunktionen zum Warenkorb und der Implementierung verschiedener Rabattberechnungen mithilfe des Strategiemusters.
PHP-Designmuster: Vom Anfänger bis zum Meister
Einführung
Designmuster sind bewährte Codierungslösungen zur Lösung häufiger Programmierprobleme. In PHP helfen uns Entwurfsmuster, wartbaren, erweiterbaren und wiederverwendbaren Code zu schreiben.
Grundlegendes Designmuster
Kreatives Muster: Bietet einen Mechanismus zum Erstellen von Objekten.
Strukturmuster: Definieren Sie die Beziehung zwischen Klassen und Objekten.
Verhaltensmuster: Definiert, wie Objekte kommunizieren und zusammenarbeiten.
Praktischer Fall: Warenkorb
Stellen Sie sich ein Warenkorbsystem vor, das die folgenden Klassen enthält:
Cart
: Stellt den Warenkorb dar, in dem gekaufte Artikel gespeichert werden. Cart
:表示购物车,存储购买的物品。Item
:表示购物车中的单个物品。DiscountService
:提供计算折扣的接口。使用工厂模式创建 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
Artikel
: Stellt einen einzelnen Artikel im Warenkorb dar.
DiscountService
: Stellt eine Schnittstelle zur Berechnung von Rabatten bereit.
Verwenden Sie das Factory-Muster, um das DiscountService
-Objekt zu erstellen:
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"); } // 其他方法类似处理 }
Verwenden Sie das Proxy-Muster, um die Protokollierungsfunktion zum Warenkorb
hinzuzufügen:
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();
Das obige ist der detaillierte Inhalt vonPHP-Entwurfsmuster vom Anfänger bis zum Experten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!