首頁 > 後端開發 > php教程 > PHP裝飾器模式詳解

PHP裝飾器模式詳解

小云云
發布: 2023-03-20 07:04:01
原創
2052 人瀏覽過

裝飾器模式又叫裝飾者模式。裝飾模式是在不必改變原始類別檔案和使用繼承的情況下,動態地擴展一個物件的功能。它是透過創造一個包裝對象,也就是裝飾來包裹真實的對象。本文主要和大家介紹PHP設計模式之裝飾器模式,簡單介紹了裝飾器模式的概念、功能並結合實例形式詳細分析了php實現與使用裝飾器模式的相關操作技巧,需要的朋友可以參考下,希望能幫助大家。

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();
登入後複製

適用場景:

1. 需要動態的為物件新增功能,這些功能可以再動態的撤銷。

2. 需要增加一些基本功能的排列組合而產生的非常大量的功能,從而使繼承關係變的不切實際。

3. 當無法採用產生子類別的方法進行擴充時。一種情況是,可能有大量獨立的擴展,為支持每種組合將產生大量的子類,使得子類數目呈爆炸性增長。另一種情況可能是因為類別定義被隱藏,或類別定義不能用來產生子類別。

相關推薦:

PHP設計模式之裝飾器模式詳解

Javascript的裝飾器模式與php、python比較用法詳解

關於裝飾器decorator的文章推薦

#

以上是PHP裝飾器模式詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板