ホームページ >バックエンド開発 >PHPチュートリアル >PHP デコレータ パターンのユースケース分析

PHP デコレータ パターンのユースケース分析

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-19 10:06:071600ブラウズ

今回は PHP Decorator モード ユースケース分析について説明します。PHP Decorator モードを使用する際の 注意事項 は何ですか。以下は実際的なケースです。見てみましょう。

デコレーターモードデコレーターモードとも呼ばれます。デコレーション モードは、元のクラス ファイルを変更したり継承を使用したりすることなく、オブジェクトの機能を動的に拡張します。ラッピングオブジェクト、つまり装飾を作成することで、実際のオブジェクトをラッピングします。

UML クラス図:

役割:

コンポーネントオブジェクトのインターフェース: これらのオブジェクトに責任を動的に追加できます
すべてのデコレータの親クラス: そうする必要がある定義済み コンポーネント インターフェイスと一致し、実際には装飾されたオブジェクトである Component オブジェクトを保持するインターフェイス。
特定のデコレータークラス: 装飾されたオブジェクトに追加される特定の関数を実装します。特定のコンポーネント オブジェクトまたは別の特定のデコレータ オブジェクトを装飾するために使用されます。

特定のコード:

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

クライアントテストコードを呼び出す:

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

適用可能なシナリオ: オブジェクトに関数を動的に追加する必要があり、これらの関数は動的に取り消すことができます。 。 2. いくつかの基本関数の順列と組み合わせによって生成される非常に多くの関数を追加する必要があり、継承関係が非現実的になります。

3. サブクラスの生成方法が拡張に使用できない場合。場合によっては、多数の独立した拡張機能があり、それぞれの組み合わせをサポートするために多数のサブクラスが生成され、サブクラスの数が爆発的に増加することがあります。別のケースとしては、クラス定義が非表示になっているか、クラス定義を使用してサブクラスを生成できないことが考えられます。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

Redis カウンター クラスを使用する手順の詳細な説明

PHP は Windows でリアルタイムの CPU メモリ使用量をどのように取得しますか

以上がPHP デコレータ パターンのユースケース分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。