動態地將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案
1.被裝飾者基類(compoent):物件元件
2.待裝飾物件(concretecomponent):具體元件角色,即將要被裝飾增加功能的類
3.裝飾者基類(decorator):需要定義乙個與元件介面一致的介面,並持有乙個component物件,該物件其實就是被裝飾的物件。
4.具體裝飾者(concretedecorator):現具體要向被裝飾物件新增的功能。用來裝飾具體的元件物件或者另外乙個具體的裝飾器物件
<?php
//被裝飾者基類
inte***ce component
//裝飾者基類
abstract class decorator implements component
public function operation()
}//具體裝飾者類
class concretecomponent implements component
}//具體裝飾者a
class concretedecoratora extends decorator
public function operation()
public function addoperationa()
}//具體裝飾者類b
class concretedecoratorb extends decorator
public function operation()
public function addoperationb()
}$decoratora = new concretedecoratora(new concretecomponent());
$decoratora->operation();
1.裝飾者和被裝飾者物件有相同的超型別
2.你可以用乙個或者多個裝飾者包裝乙個物件
3.既然裝飾者和被裝飾者物件有相同的超類,所以在任何需要原始物件(被包裝的)的場合,可以用裝飾過的物件替換他
4.(關鍵點)裝飾者可以在委託被裝飾者的行為之前/之後,加上自己的行為,已達到特地的目的
5.物件可以在任何時候被裝飾,所以可以在執行時動態的、不限量的用你喜歡的裝飾者來裝飾物件
參考文獻《head first 設計模式》
PHP設計模式之裝飾者模式
裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。abstract class beverage 被裝飾者類 class coffee extends beverage public function cost 以下三個類是裝飾者相關類 class cond...
PHP設計模式之裝飾者模式
php設計模式之裝飾者模式 介紹 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。思維導圖 有這樣乙個專案,做乙個餐廳訂餐系統。起初的 結構是這樣的。前面有很多beverage的繼承類,現在遇到的問題是牛奶的價錢 了,那麼所有相關的類,我們都要進行調整,比...
php設計模式之 裝飾者模式
beverage.php namespace designpattern abstract class beverage param string name return beverage public function setname string name beverage return flo...