PHP裝飾器模式使用案例分析

來源:互聯網
上載者:User
這次給大家帶來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中文網其它相關文章!

推薦閱讀:

redis計數器類使用步驟詳解

php在windows內怎麼取得cpu記憶體即時使用率

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.