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

2022-02-15 15:27:50 字數 856 閱讀 8018

<?php 

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

* * 角色

* 抽象構件(component)角色:定義乙個物件介面,以規範準備接收附加職責的物件,從而可以給這些物件動態地新增職責。

* 具體構件(concrete component)角色:定義乙個將要接收附加職責的類。

* 裝飾(decorator)角色:持有乙個指向component物件的指標,並定義乙個與component介面一致的介面。

* 具體裝飾(concrete decorator)角色:負責給構件物件增加附加的職責。

*///1抽象構件角色

abstract class drink

//具體構件角色

class coffee extends drink

}//生成物件。

$coffee = new coffee();

//$coffee->showprice();

//但是我想動態的為coffee物件新增功能,而不改變原有的類和繼承關係,怎麼辦?

//裝飾模式

//裝飾角色

class decretor extends drink

public function showprice()

public function add()

}//具體裝飾角色

class suger extends decretor

}$suger = new suger($coffee);

$suger->showprice();

?>

uml類圖如下:

php 設計模式 之 裝飾模式

裝飾模式 顧名思義,裝飾模式是一種對物件資料的多次過濾,就像裝飾一樣,一層層的修飾,獲取滿意的結果。裝飾模式共分為兩個部分 1 裝飾者 在這個介面介面下面的類和方法用以對資料進行修飾 即對資料進行過濾修改 2 被裝飾者 這個就是要被過濾的資料介面物件炒菜之前要對買來的菜進行揀菜,洗菜等操作。這個就類...

php 設計模式 之 裝飾模式

裝飾模式 顧名思義,裝飾模式是一種對物件資料的多次過濾,就像裝飾一樣,一層層的修飾,獲取滿意的結果。裝飾模式共分為兩個部分 1 裝飾者 在這個介面介面下面的類和方法用以對資料進行修飾 即對資料進行過濾修改 2 被裝飾者 這個就是要被過濾的資料介面物件炒菜之前要對買來的菜進行揀菜,洗菜等操作。這個就類...

PHP設計模式之裝飾者模式

裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。abstract class beverage 被裝飾者類 class coffee extends beverage public function cost 以下三個類是裝飾者相關類 class cond...