Heim  >  Artikel  >  Backend-Entwicklung  >  Abstraktes Fabrikmuster und seine PHP-Implementierung

Abstraktes Fabrikmuster und seine PHP-Implementierung

伊谢尔伦
伊谢尔伦Original
2016-12-01 11:50:311356Durchsuche

Das Abstract Factory-Muster ist ein Erstellungsmuster, das eine Möglichkeit bietet, eine Reihe separater Fabriken mit demselben Thema zu kapseln. Sein Kern besteht darin, „Schnittstellen bereitzustellen, um eine Reihe verwandter oder unabhängiger Objekte zu erstellen, ohne die spezifischen Klassen dieser Objekte anzugeben“.

Das abstrakte Fabrikmuster stellt eine Schnittstelle zum Erstellen systembezogener oder voneinander abhängiger Objekte bereit, ohne deren konkrete Klassen anzugeben.

Hauptrollen im abstrakten Factory-Muster

Abstract Factory-Rolle: Deklariert die Schnittstelle zum Erstellen abstrakter Produktobjekte

Concrete Factory-Rolle: Implementiert Erstellungsvorgänge für Produktobjekte

Abstrakte Produktrolle: deklariert die Schnittstelle eines Produkttyps

Konkrete Produktrolle: implementiert die durch die abstrakte Produktrolle definierte Schnittstelle

Dies ähnelt dem Factory-Methodenmodell. Wir wollen nicht mehr nur einen Burger, sondern vielleicht 4 Burger und 2 Chicken Wings. Wir sagen dem Kellner immer noch, dass der Kellner zu der bestimmten Fabrik gehört. Das spezifische Produkt ist das, worüber wir sprechen ungefähr. Der Kellner fragte nach dem Essen.

Anwendbarkeit

Wenn ein System unabhängig von seinen Produkten erstellt, zusammengestellt und dargestellt werden soll.

Wenn ein System mit einer von mehreren Produktfamilien konfiguriert werden soll.

Wenn es notwendig ist, das Design einer Reihe verwandter Produktobjekte zur gemeinsamen Verwendung hervorzuheben.

Stellen Sie eine Produktklassenbibliothek bereit und möchten Sie nur deren Schnittstellen und nicht deren Implementierungen anzeigen.

Klassendiagramm

Abstraktes Fabrikmuster und seine PHP-Implementierung

Instanz

<?php
class Button{}
class Border{}
class MacButton extends Button{}
class WinButton extends Button{}
class MacBorder extends Border{}
class WinBorder extends Border{}
interface AbstractFactory {
    public function CreateButton();
    public function CreateBorder();
}
class MacFactory implements AbstractFactory{
    public function CreateButton(){ return new MacButton(); }
    public function CreateBorder(){ return new MacBorder(); }
}
class WinFactory implements AbstractFactory{
    public function CreateButton(){ return new WinButton(); }
    public function CreateBorder(){ return new WinBorder(); }
}
?>

In diesem Beispiel implementiert die Factory-Klasse eine Reihe von Factory-Methoden. Wenn Sie neue Funktionen hinzufügen möchten, können Sie eine neue Schnittstelle hinzufügen und die neue Factory-Klasse diese Schnittstelle implementieren lassen, ohne die vorhandene Factory-Klasse zu ändern.

Vor- und Nachteile

Vorteile

Trennt bestimmte Klassen

Erleichtert das Hinzufügen oder Ersetzen von Produktfamilien

Gut für die Produktkonsistenz

Nachteile

Schwierigkeit bei der Unterstützung neuer Produkttypen. Dies liegt daran, dass die AbstractFactory-Schnittstelle die Sammlung der Produkte bestimmt, die erstellt werden können. Die Unterstützung neuer Produkttypen erfordert eine Erweiterung der Factory-Zugriffsschnittstelle, was zu Änderungen an der AbstractFactory-Klasse und allen ihren Unterklassen führt.


Stellungnahme:
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
Vorheriger Artikel:OOP-Gedanke und DesignNächster Artikel:OOP-Gedanke und Design