Maison >développement back-end >tutoriel php >Analyse de cas d'utilisation du modèle de décorateur PHP

Analyse de cas d'utilisation du modèle de décorateur PHP

php中世界最好的语言
php中世界最好的语言original
2018-05-19 10:06:071577parcourir

Cette fois, je vous présente une analyse de cas d'utilisation de PHP Decorator Pattern , quelles sont les Précautions lors de l'utilisation de PHP Decorator Pattern, ce qui suit est un cas pratique, jetons un coup d'œil.

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.

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

Appeler le code test client :

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. Il est nécessaire d'ajouter dynamiquement des fonctions à un objet, et ces fonctions peuvent être révoquées dynamiquement.

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.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Explication détaillée des étapes pour utiliser la classe de compteur Redis

Comment obtenir le vrai- temps d'utilisation de la mémoire CPU en PHP sous Windows

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