Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung des PHP-Decorator-Musters
Decorator-Modus wird auch Decorator-Modus genannt. Der Dekorationsmodus besteht darin, die Funktionalität eines Objekts dynamisch zu erweitern, 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. In diesem Artikel wird hauptsächlich das Dekoratormuster des PHP-Designmusters vorgestellt. Er stellt das Konzept und die Funktion des Dekoratormusters kurz vor und analysiert detailliert die damit verbundenen Bedienfähigkeiten der PHP-Implementierung und Verwendung des Dekoratormusters in Form von Beispielen Ich hoffe, ich kann jedem helfen.
UML-Klassendiagramm:
Rolle:
Schnittstelle von Komponentenobjekten: Sie können diesen Objekten dynamisch Verantwortlichkeiten hinzufügen
Die übergeordnete Klasse aller Dekoratoren: Sie müssen eine Schnittstelle definieren stimmt mit der Komponentenschnittstellenschnittstelle überein und enthält ein Komponentenobjekt, das tatsächlich das dekorierte Objekt ist.
Spezifische Dekoratorklasse: Implementieren Sie die spezifischen Funktionen, die dem dekorierten Objekt hinzugefügt werden sollen. Wird zum Dekorieren eines bestimmten Komponentenobjekts oder eines anderen spezifischen Dekorationsobjekts verwendet.
Spezifischer Code:
<?php /** * Created by PhpStorm. * User: Jiang * Date: 2015/5/3 * Time: 11:11 */ /**组件对象接口 * Interface IComponent */ interface IComponent { function Display(); } /**待装饰对象 * Class Person */ class Person implements IComponent { private $name; function __construct($name) { $this->name=$name; } function Display() { echo "装扮的:{$this->name}<br/>"; } } /**所有装饰器父类 * Class Clothes */ class Clothes implements IComponent { protected $component; function Decorate(IComponent $component) { $this->component=$component; } function Display() { if(!empty($this->component)) { $this->component->Display(); } } } //------------------------------具体装饰器---------------- class PiXie extends Clothes { function Display() { echo "皮鞋 "; parent::Display(); } } class QiuXie extends Clothes { function Display() { echo "球鞋 "; parent::Display(); } } class Tshirt extends Clothes { function Display() { echo "T恤 "; parent::Display(); } } class Waitao extends Clothes { function Display() { echo "外套 "; parent::Display(); } }
Testcode für den aufrufenden Kunden:
header("Content-Type:text/html;charset=utf-8"); //------------------------装饰器模式测试代码------------------ require_once "./Decorator/Decorator.php"; $Yaoming=new Person("姚明"); $aTai=new Person("A泰斯特"); $pixie=new PiXie(); $waitao=new Waitao(); $pixie->Decorate($Yaoming); $waitao->Decorate($pixie); $waitao->Display(); echo "<hr/>"; $qiuxie=new QiuXie(); $tshirt=new Tshirt(); $qiuxie->Decorate($aTai); $tshirt->Decorate($qiuxie); $tshirt->Display();
Anwendbare Szenarien:
1. Sie müssen einem Objekt dynamisch Funktionen hinzufügen, und diese Funktionen können sein Dynamik des Widerrufs.
2. Durch die Permutation und Kombination einiger Grundfunktionen müssen sehr viele Funktionen hinzugefügt werden, was die Vererbungsbeziehung unrealistisch macht.
3. Wenn die Methode zum Generieren von Unterklassen nicht zur Erweiterung verwendet werden kann. In einem Fall gibt es möglicherweise eine große Anzahl unabhängiger Erweiterungen und es wird eine große Anzahl von Unterklassen generiert, um jede Kombination zu unterstützen, wodurch die Anzahl der Unterklassen explodiert. Ein anderer Fall könnte sein, dass die Klassendefinition ausgeblendet ist oder nicht zum Generieren von Unterklassen verwendet werden kann.
Verwandte Empfehlungen:
Detaillierte Erläuterung des Dekoratormodus des PHP-Entwurfsmusters
Javascripts Dekoratormodus und PHP, Python Detaillierte Erläuterung der vergleichenden Verwendung
Empfohlene Artikel über Dekorateure
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des PHP-Decorator-Musters. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!