Heim >Backend-Entwicklung >PHP-Tutorial >Anwendungsfallanalyse für PHP-Decorator-Muster
Dieses Mal bringe ich Ihnen PHP Decorator Pattern Anwendungsfallanalyse, was sind die Vorsichtsmaßnahmen bei der Verwendung von PHP Decorator Pattern, das Folgende ist ein praktischer Fall, werfen wir einen Blick darauf.
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.
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: Implementiert 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(); } }
Client-Testcode aufrufen:
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. Es ist notwendig, einem Objekt dynamisch Funktionen hinzuzufügen, und diese Funktionen können dynamisch widerrufen werden.
2. Eine sehr große Anzahl von Funktionen, die durch die Permutation und Kombination einiger Grundfunktionen generiert werden, muss 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.
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!
Empfohlene Lektüre:
Ausführliche Erklärung der Schritte zur Verwendung der Redis-Zählerklasse
Wie man die echten Informationen erhält- Zeit CPU-Speichernutzung in PHP unter Windows
Das obige ist der detaillierte Inhalt vonAnwendungsfallanalyse für PHP-Decorator-Muster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!