Dekorationsmodus
Erweitern Sie die Funktionalität eines Objekts dynamisch, ohne die ursprüngliche Klassendatei zu ändern und Vererbung zu verwenden. Es umhüllt das reale Objekt, indem es ein Verpackungsobjekt, also eine Dekoration, erstellt.
Funktionen des Dekorationsmodus
(1) Dekorationsobjekte haben die gleiche Schnittstelle wie echte Objekte. Auf diese Weise kann das Client-Objekt mit dem dekorierten Objekt auf die gleiche Weise interagieren wie ein reales Objekt.
(2) Das dekorierte Objekt enthält einen Verweis auf das reale Objekt
(3) Das dekorierte Objekt akzeptiert alle Anfragen des Kunden. Es leitet diese Anfragen an die realen Objekte weiter.
(4) Dekorationsobjekte können vor oder nach der Weiterleitung dieser Anfragen einige zusätzliche Funktionen hinzufügen. Dadurch wird sichergestellt, dass zusätzliche Funktionalität zur Laufzeit extern hinzugefügt werden kann, ohne die Struktur eines bestimmten Objekts zu ändern. Beim objektorientierten Design wird die funktionale Erweiterung einer bestimmten Klasse normalerweise durch Vererbung implementiert.
Vorteile
1. Der Zweck des Decorator-Musters und der Vererbungsbeziehung besteht darin, die Funktionalität von Objekten zu erweitern, aber Decorator kann mehr Flexibilität bieten als die Vererbung.
2. Durch die Verwendung verschiedener spezifischer Dekorationsklassen und die Anordnung und Kombination dieser Dekorationsklassen können Designer viele Kombinationen unterschiedlicher Verhaltensweisen erstellen.
Nachteile
1. Diese Funktion ist flexibler als die Vererbung und bedeutet auch mehr Komplexität.
2. Der Dekorationsmodus führt zu vielen kleinen Klassen im Design. Bei übermäßiger Nutzung wird das Programm sehr kompliziert.
3. Der Dekorationsmodus ist für die Programmierung abstrakter Komponenten (Komponenten) vorgesehen. Wenn Sie jedoch für bestimmte Komponenten programmieren, sollten Sie Ihre Anwendungsarchitektur überdenken und prüfen, ob Dekoratoren geeignet sind. Natürlich können Sie auch die Komponentenschnittstelle ändern, neue öffentliche Verhaltensweisen hinzufügen und den „transluzenten“ Dekoratormodus implementieren. Treffen Sie bei tatsächlichen Projekten die beste Wahl.
PHP-Codebeispiel
Abstrahieren Sie eine Worker-Klasse mit Arbeitsmethoden, und 2 Unterklassen (Klempner, Zimmermann) implementieren die Worker-Schnittstelle:
interface worker{ public function doSomeWork(); } //水管工 class shuiguan implements worker{ public function doSomeWork(){ echo '修水管'; } } //木工 class mu implements worker{ public function doSomeWork(){ echo '修门窗'; } }
Jetzt Es gibt eine neue Anforderung: Mitarbeiter von Unternehmen A (einschließlich Wasserrohren und Zimmerleuten) müssen beim Betreten der Tür „Hallo!“ sagen. Wir möchten diese Funktion einheitlich umsetzen, ohne die Grundklassen zu beeinträchtigen. Wir können die Dekorationsmodusklasse verwenden, um Folgendes zu implementieren:
//a公司工人 class aWorker implements worker{ //具体的工人 public $worker; //构造函数获取工人 public function __construct($worker){ $this->worker = $worker; } public function doSomeWork(){ echo '您好!'; $this->worker->doSomeWork(); } } $aWorker = new aWorker(new shuiguan()); $aWorker->doSomeWork();
aWorker implementiert auch die Schnittstelle der Worker-Klasse, die ein bestimmtes Worker-Objekt erfordert. Verwenden Sie nach Abschluss der speziellen Anforderungen (Hallo) die Methode des Originals Arbeiterobjekt. Das ist der Dekorationsmodus!
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Dekorationsmodus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!