PHP 设计模式之装饰器模式
生活随笔
收集整理的這篇文章主要介紹了
PHP 设计模式之装饰器模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
裝飾器模式,使得在一個類不能完全滿足需求時對其進行一些特定的自定義處理,而無需要新創建一個類
<?php// 可以動態的添加修改類的功能class Canvas {public function init(){echo "init";}public function rect($top, $right, $bottom, $left){echo $top, $right, $bottom, $left;} }// 目標,為 rect 方法增加一個輸出標題/** 傳統方法 class Canvas2 extends Canvas {public function rect($top, $right, $bottom, $left){echo "++++", $top, $right, $bottom, $left;} }$canvas = new Canvas2(); $canvas->init(); $canvas->rect(3,5,6,7); */// 裝飾器模式class Danvas implements IDrawDecorator {private $decorators;public function init(){echo "init";}public function rect($top, $right, $bottom, $left){$this->beforeDraw();echo $top, $right, $bottom, $left;$this->afterDraw();}public function beforeDraw(){$decorators = array_reverse($this->decorators);foreach ($decorators as $decorator) {$decorator->beforeDraw();}}public function afterDraw(){foreach ($this->decorators as $decorator) {$decorator->afterDraw();}}public function addDecorator(IDrawDecorator $decorator){$this->decorators[] = $decorator;} }interface IDrawDecorator {public function beforeDraw();public function afterDraw(); }abstract class ADrawDecorator {public abstract function beforeDraw();public abstract function afterDraw(); }class ColorDrawDecorator extends ADrawDecorator {public function beforeDraw(){echo "color before \n";} }class SizeDrawDecorator extends ADrawDecorator {public function beforeDraw(){echo "size before \n";}public function afterDraw(){echo "size after \n";} }$canvas = new Danvas; $canvas->init();$canvas->addDecorator(new ColorDrawDecorator); $canvas->addDecorator(new SizeDrawDecorator);$canvas->rect(4,6,7,8);總結
以上是生活随笔為你收集整理的PHP 设计模式之装饰器模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP 设计模式之策略模式
- 下一篇: PHP 设计模式之迭代器模式