beverage.php
<?php
namespace designpattern;
abstract class beverage
/*** @param string $name
* @return beverage
*/public function setname(string $name): beverage
/*** @return float
*/public abstract function getcost(): float;
/*** beverage constructor.
*/public function __construct()
}
bluemountaincoffee.php
<?php
namespace designpattern;
/** * 藍山咖啡
*/class bluemountaincoffee extends beverage
}
cubitacoffee.php
<?php
namespace designpattern;
/** * 琥爵咖啡
*/class cubitacoffee extends beverage
}
coffeedecorator.php
<?php
namespace designpattern;
abstract class coffeedecorator extends beverage
}
milkdecorator.php
<?php
namespace designpattern;
class milkdecorator extends coffeedecorator
}
sugardecorator.php
<?php
namespace designpattern;
class sugardecorator extends coffeedecorator
}
最終呼叫:
$coffee = new \designpattern\bluemountaincoffee();//生成一杯藍山咖啡
$beverage = new \designpattern\milkdecorator($coffee);//給藍山咖啡加乙份牛奶
$beverage = new \designpattern\milkdecorator($beverage);//給藍山咖啡再加乙份牛奶
$beverage = new \designpattern\sugardecorator($beverage);//給藍山咖啡加乙份糖
$beverage = new \designpattern\sugardecorator($beverage);//給藍山咖啡再加乙份糖
$beverage = new \designpattern\sugardecorator($beverage);//給藍山咖啡再加乙份糖
var_dump($beverage->getcost());
程式執行結果:
float(26.6)
PHP設計模式之裝飾者模式
裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。abstract class beverage 被裝飾者類 class coffee extends beverage public function cost 以下三個類是裝飾者相關類 class cond...
PHP設計模式之裝飾者模式
php設計模式之裝飾者模式 介紹 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。思維導圖 有這樣乙個專案,做乙個餐廳訂餐系統。起初的 結構是這樣的。前面有很多beverage的繼承類,現在遇到的問題是牛奶的價錢 了,那麼所有相關的類,我們都要進行調整,比...
設計模式之 裝飾者模式
一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...