Mode de décoration
Étendez dynamiquement les fonctionnalités d'un objet sans avoir à modifier le fichier de classe d'origine et à utiliser l'héritage. Il enveloppe l'objet réel en créant un objet d'emballage, c'est-à-dire une décoration.
Caractéristiques du mode Décoration
(1) Les objets de décoration ont la même interface que les objets réels. Ainsi l’objet client peut interagir avec l’objet décoré de la même manière qu’un objet réel.
(2) L'objet décoré contient une référence à l'objet réel
(3) L'objet décoré accepte toutes les demandes du client. Il transmet ces requêtes aux objets réels.
(4) Les objets de décoration peuvent ajouter des fonctionnalités supplémentaires avant ou après le transfert de ces demandes. Cela garantit que des fonctionnalités supplémentaires peuvent être ajoutées en externe au moment de l'exécution sans modifier la structure d'un objet donné. Dans la conception orientée objet, l'extension fonctionnelle d'une classe donnée est généralement implémentée via l'héritage.
Avantages
1. Le but du modèle Decorator et de la relation d'héritage est d'étendre la fonctionnalité des objets, mais Decorator peut offrir plus de flexibilité que l'héritage.
2. En utilisant différentes classes de décoration spécifiques ainsi que la disposition et la combinaison de ces classes de décoration, les concepteurs peuvent créer de nombreuses combinaisons de comportements différents.
Inconvénients
1. Cette fonctionnalité, qui est plus flexible que l'héritage, signifie également plus de complexité.
2. Le mode Décoration entraînera de nombreuses petites classes dans la conception. S'il est trop utilisé, le programme deviendra très compliqué.
3. Le mode Décoration est destiné à la programmation de type composant abstrait (Component). Cependant, si vous programmez pour des composants spécifiques, vous devez repenser l'architecture de votre application et déterminer si les décorateurs sont appropriés. Bien entendu, vous pouvez également modifier l'interface du composant, ajouter de nouveaux comportements publics et implémenter le mode décorateur « translucide ». Faites le meilleur choix dans les projets réels.
Exemple de code php
Résumer une classe de travailleurs avec des méthodes de travail, et 2 sous-classes (plombier, charpentier) implémentent l'interface de travail :
interface worker{ public function doSomeWork(); } //水管工 class shuiguan implements worker{ public function doSomeWork(){ echo '修水管'; } } //木工 class mu implements worker{ public function doSomeWork(){ echo '修门窗'; } }
Il existe désormais une nouvelle exigence : les travailleurs de l'entreprise A (y compris les conduites d'eau et les menuisiers) doivent dire "Bonjour !" Nous voulons mettre en œuvre cette fonction de manière uniforme sans affecter les classes de base. Nous pouvons utiliser la classe du mode décoration pour implémenter :
//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 implémente également l'interface de la classe travailleur, qui nécessite un objet travailleur spécifique et utilise l'objet travailleur d'origine après avoir rempli les exigences particulières (en disant bonjour) méthode. C'est le mode décoration !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!