Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Entwurfsmuster vom Anfänger bis zum Experten

PHP-Entwurfsmuster vom Anfänger bis zum Experten

王林
Freigeben: 2024-05-07 15:45:02
Original
1092 Leute haben es durchsucht

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 设计模式从入门到精通

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.

  • Fabrikmuster: Erstellen Sie Objekte, ohne direkt eine konkrete Klasse anzugeben.
  • Singleton-Muster: Stellt sicher, dass eine Klasse nur einmal eine Instanz erstellt.

Strukturmuster: Definieren Sie die Beziehung zwischen Klassen und Objekten.

  • Adaptermodus: Ermöglicht die Zusammenarbeit inkompatibler Schnittstellen.
  • Proxy-Muster: Bietet transparenten Zugriff auf Objekte.
  • Dekorationsmuster: Fügen Sie vorhandenen Objekten dynamisch neue Funktionen hinzu.

Verhaltensmuster: Definiert, wie Objekte kommunizieren und zusammenarbeiten.

  • Beobachtermuster: Für Veröffentlichungs-/Abonnementmechanismus.
  • Strategiemodus: Ermöglicht das Ändern des Algorithmus zur Laufzeit.
  • Template-Methodenmuster: Definieren Sie das Algorithmus-Framework und ermöglichen Sie Unterklassen, die Schritte anzupassen.

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();
  }
}
Nach dem Login kopieren

使用代理模式为 CartArtikel: 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");
  }

  // 其他方法类似处理
}
Nach dem Login kopieren

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();
Nach dem Login kopieren
🎜🎜Erreichen Sie verschiedene Ziele durch Strategie Berechnung des Musterrabatts: 🎜🎜rrreee🎜🎜Fazit🎜🎜🎜Durch die Verwendung von Designmustern können wir eleganten, flexiblen und wartbaren PHP-Code erstellen. Die in diesem Artikel vorgestellten grundlegenden Entwurfsmuster können uns dabei helfen, eine Vielzahl von Programmierherausforderungen zu lösen und hochwertige Software zu erstellen. 🎜

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
pemerolehan data php?
Aus 1970-01-01 08:00:00
0
0
0
PHP 데이터 수집?
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage