裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。
<?php
abstract class beverage
// 被裝飾者類
class coffee extends beverage
public function cost()
}// 以下三個類是裝飾者相關類
class condimentdecorator extends beverage
public function cost() }
class milk extends condimentdecoratorelse
exit('failure');
} public function cost() }
class sugar extends condimentdecoratorelse
}public function cost()}
// test case
//1.拿杯咖啡
$coffee = new coffee();
//2.加點牛奶
$coffee = new milk($coffee);
//3.加點糖
$coffee = new sugar($coffee);
printf("coffee total:%0.2f元\n",$coffee->cost());
總結
1.裝飾者(milk)和被裝飾者(coffee)必須是一樣的型別。目的是裝飾者必須取代被裝飾者。
2.新增行為:當裝飾者和元件組合時,就是在加入新的行為。
PHP設計模式之裝飾者模式
php設計模式之裝飾者模式 介紹 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。思維導圖 有這樣乙個專案,做乙個餐廳訂餐系統。起初的 結構是這樣的。前面有很多beverage的繼承類,現在遇到的問題是牛奶的價錢 了,那麼所有相關的類,我們都要進行調整,比...
php設計模式之 裝飾者模式
beverage.php namespace designpattern abstract class beverage param string name return beverage public function setname string name beverage return flo...
設計模式之 裝飾者模式
一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...