裝飾器模式可以動態的添加修改類別的功能,.個類別提供了一個功能,如果要在修改並添加額外的功能,傳統的編程是寫一個子類別去繼承它,並重新實作類別的方法,使用裝飾器模式#,只需在執行時間加入一個裝飾器 #物件即可實現,可以實現最大的靈活性
<?php /* * 装饰模式 */ abstract class Beverage { public $_name; abstract public function Cost(); } // 被装饰者类 class Coffee extends Beverage { public function construct() { $this->_name = 'Coffee'; } public function Cost() { return 1.00; } } // 以下三个类是装饰者相关类 class CondimentDecorator extends Beverage //装饰类 { public function construct() { $this->_name = 'Condiment'; } public function Cost() { return 0.1; } } class Milk extends CondimentDecorator //牛奶 配料 --装饰者 { public $_beverage; public function construct($beverage) { if ($beverage instanceof Beverage) { $this->_beverage = $beverage; } else exit('Failure'); } public function Cost() { return $this->_beverage->Cost() + 0.2; } } class Sugar extends CondimentDecorator //糖 配料 --装饰者 { public $_beverage; public function construct($beverage) { $this->_name = 'Sugar'; if ($beverage instanceof Beverage) { $this->_beverage = $beverage; } else { exit('Failure'); } } public function Cost() { return $this->_beverage->Cost() + 0.2; } } // Test Case //1.拿杯咖啡 $coffee = new Coffee(); //2.加点牛奶 $coffee = new Milk($coffee); //3.加点糖 $coffee = new Sugar($coffee); echo $coffee->Cost(); echo $coffee->_name;
裝飾模式降低了系統的耦合度,可以動態增加或刪除物件的職責,並使得需要裝飾的具體構件類別和具體裝飾類別可以獨立變化,以便增加新的具體構件類別和具體裝飾類別
相關推薦:
以上是PHP設計模式裝飾器模式詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!