php實現設計模式之 裝飾模式

來源:互聯網
上載者:User

標籤:blog   http   io   使用   sp   檔案   div   on   log   

裝飾模式 :裝飾模式是在不必改變原類檔案和使用繼承的情況下,動態擴充一個對象的功能。它是通過建立一個封裝對象,也就是裝飾來包裹真實的對象。

裝飾模式是一種 結構型模式

 

主要角色 :

(1)抽象構件(Component)角色:給出一個抽象介面,以規範準備接收附加責任的對象。
(2)具體構件(Concrete Component)角色:定義一個將要接收附加責任的類。
(3)裝飾(Decorator)角色:持有一個構件(Component)對象的執行個體,並實現一個與抽象構件介面一致的介面。
(4)具體裝飾(Concrete Decorator)角色:負責給構件對象添加上附加的責任。

 

 

uml類圖如下所示:

 

 

 

 

下面是php實現的一個執行個體:

<?php /* * 裝飾模式:在不必改變原類檔案和使用繼承的情況下,動態地擴充一個對象的功能。它是通過建立一個封裝對象,也就是裝飾來包裹真實的對象。 *  * 角色 * 抽象構件(Component)角色:定義一個對象介面,以規範準備接收附加職責的對象,從而可以給這些對象動態地添加職責。 * 具體構件(Concrete Component)角色:定義一個將要接收附加職責的類。  * 裝飾(Decorator)角色:持有一個指向Component對象的指標,並定義一個與Component介面一致的介面。 * 具體裝飾(Concrete Decorator)角色:負責給構件對象增加附加的職責。 *///1抽象構件角色abstract class drink{abstract function showprice();}//具體構件角色class coffee extends drink{public $name = ‘咖啡‘;public $price = ‘10‘;public function showprice(){echo $this->name.‘   ‘;echo $this->price.‘元‘;}}//產生對象。$coffee = new coffee();//$coffee->showprice();//上面我已經產生了一個對象,現在已經線上上運行//但是我想動態為coffee對象添加功能,而不改變原有的類和繼承關係,怎麼辦?//裝飾模式//裝飾角色class decretor extends drink{public $drink;public function __construct(drink $drink){//封裝了對象哦$this->drink = $drink;}public function showprice(){//實現對象原有功能,$this->drink->showprice();$this->add();//新增功能}public function add(){}}//具體裝飾角色class suger extends decretor{public $price = 1.5;public $name = ‘加糖‘;public function add(){echo $this->name.‘   ‘.$this->price;echo ‘  一共‘.($this->drink->price+$this->price).‘元‘;}}$suger = new suger($coffee);$suger->showprice();?>

  

php實現設計模式之 裝飾模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.