Maison  >  Article  >  développement back-end  >  Explication détaillée du modèle de décorateur PHP

Explication détaillée du modèle de décorateur PHP

小云云
小云云original
2018-02-09 09:25:422008parcourir

Le

Le mode Décorateur est également appelé mode Décorateur. Le mode de décoration consiste à étendre dynamiquement les fonctionnalités d'un objet sans modifier le fichier de classe d'origine et en utilisant l'héritage. Il enveloppe l'objet réel en créant un objet d'emballage, c'est-à-dire une décoration. Cet article présente principalement le modèle de décorateur du modèle de conception PHP à tout le monde.Il présente brièvement le concept et la fonction du modèle de décorateur et analyse en détail les compétences opérationnelles associées à l'implémentation de PHP et à l'utilisation du modèle de décorateur sous forme d'exemples. le besoin peut s'y référer. J'espère pouvoir aider tout le monde.

Diagramme de classes UML :

Rôle :

Interface des objets composants : Vous pouvez ajouter dynamiquement des responsabilités à ces objets
La classe parent de tous les décorateurs : Vous devez définir une interface qui est cohérent avec l'interface de l'interface du composant et contient un objet Component, qui est en fait l'objet décoré.
Classe de décorateur spécifique : Implémente les fonctions spécifiques à ajouter à l'objet décoré. Utilisé pour décorer un objet composant spécifique ou un autre objet décorateur spécifique.

Code spécifique :


<?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();
  }
}

Code test client appelant :


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();

Scénarios applicables :

1. Vous devez ajouter dynamiquement des fonctions à un objet, et ces fonctions peuvent être dynamique de révocation.

2. Un très grand nombre de fonctions générées par la permutation et la combinaison de certaines fonctions de base doivent être ajoutées, ce qui rend la relation d'héritage irréaliste.

3. Lorsque la méthode de génération de sous-classes ne peut pas être utilisée pour l'expansion. Dans un cas, il peut y avoir un grand nombre d'extensions indépendantes, et un grand nombre de sous-classes seront générées pour prendre en charge chaque combinaison, provoquant une explosion du nombre de sous-classes. Un autre cas pourrait être dû au fait que la définition de classe est masquée ou qu'elle ne peut pas être utilisée pour générer des sous-classes.

Recommandations associées :

Explication détaillée du mode décorateur du modèle de conception PHP

Mode décorateur de Javascript et php, python Explication détaillée de l'utilisation comparative

Articles recommandés sur les décorateurs

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn