這次給大家帶來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記憶體即時使用率