PHP设计模式之装饰者模式代码实例
程序员文章站
2022-04-20 23:20:48
定义:
装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免...
定义:
装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。
角色:
component(被装饰对象基类)
concretecomponent(具体被装饰对象)
decorator(装饰者基类)
contretedecorator(具体的装饰者类)
示例代码:
//被装饰者基类 interface component { public function operation(); } //装饰者基类 abstract class decorator implements component { protected $component; public function __construct(component $component) { $this->component = $component; } public function operation() { $this->component->operation(); } } //具体装饰者类 class concretecomponent implements component { public function operation() { echo 'do operation'.php_eol; } } //具体装饰类a class concretedecoratora extends decorator { public function __construct(component $component) { parent::__construct($component); } public function operation() { parent::operation(); $this->addedoperationa(); // 新增加的操作 } public function addedoperationa() { echo 'add operation a '.php_eol; } } //具体装饰类b class concretedecoratorb extends decorator { public function __construct(component $component) { parent::__construct($component); } public function operation() { parent::operation(); $this->addedoperationb(); } public function addedoperationb() { echo 'add operation b '.php_eol; } } class client { public static function main() { /* do operation add operation a */ $decoratora = new concretedecoratora(new concretecomponent()); $decoratora->operation(); /* do operation add operation a add operation b */ $decoratorb = new concretedecoratorb($decoratora); $decoratorb->operation(); } } client::main();
上一篇: 用模板快速创建工作簿节省大量的重复输入和格式化等工作
下一篇: 这属于高空作战,你来是没用的