裝飾器模式

2022-05-06 03:21:09 字數 1016 閱讀 7953

解釋:如果已有物件的部分內容或功能性發生了改變,但是不需要修改原始物件的結構,那麼使用裝飾器設計模式最合適

需求:我們本來有乙個userlist類:

namespace decorator;

class userlist

public function outusers()

}}

require 'userlist.php';

$ul = new decorator\userlist();

$ul->adduser('a');

$ul->adduser('b');

$ul->adduser('c');

$ul->outusers();

其中outusers是把userlist儲存的所有的使用者列印出來,後來我們的需求變了,在輸出使用者的時候還要將使用者變成大寫的,直觀的寫法是修改outusers()方法。但是對於這麼小的改變最好的做法不是修改基類,而是建立乙個基於裝飾器模式的物件。

**:建立乙個裝飾器:

namespace decorator;

class userlistdecorator

public function makecaps() 

}}

可以看到我們在裝飾器類的makecaps對userlist物件做了修改,將它儲存的所有使用者都變成了大寫。

require 'userlist.php';

require 'userlistdecorator.php';

$ul = new decorator\userlist();

$ul->adduser('a');

$ul->adduser('b');

$ul->adduser('c');

$ul->outusers();

$uldecorator = new decorator\userlistdecorator($ul);

$uldecorator->makecaps();

$ul->outusers();

裝飾器模式

大話設計模式 裝飾器模式 為已有功能動態地新增更多功能,當系統需要新功能,向舊的類中新增新功能,裝飾了原有類的核心職責和行為,而不改變它們 就像包裝袋一樣,有 的包裝袋包裝之前裝好東西的包裝袋 ifndef clothes h define clothes h include using names...

裝飾器模式

裝飾器設計模式 對真實物件動態的新增功能 抽象元件 author zhangjianbin public inte ce icar 俱體構件物件 真實的物件 author zhangjianbin class car implements icar 裝飾器物件 author zhangjianbin...

裝飾器模式

一 概念 裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該 盡量使用物件組合,而不是物件繼承來擴...