时间:2021-07-01 10:21:17 帮助过:3人阅读
这篇文章主要介绍了PHP设计模式之装饰者模式代码实例,装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能,本文就给出了代码实例,需要的朋友可以参考下
定义:
装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。
角色:
Component(被装饰对象基类)
ConcreteComponent(具体被装饰对象)
Decorator(装饰者基类)
ContreteDecorator(具体的装饰者类)
示例代码:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
//被装饰者基类 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(); |
http://www.bkjia.com/PHPjc/998354.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/998354.htmlTechArticlePHP设计模式之装饰者模式代码实例 这篇文章主要介绍了PHP设计模式之装饰者模式代码实例,装饰者模式就是不修改原类代码和继承的情况下...