首页 > 开发 > PHP > 正文

PHP设计模式之装饰者模式代码实例

2024-05-04 23:34:59
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP设计模式之装饰者模式代码实例,装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能,本文就给出了代码实例,需要的朋友可以参考下

定义:

装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。

角色:

Component(被装饰对象基类)

ConcreteComponent(具体被装饰对象)

Decorator(装饰者基类)

ContreteDecorator(具体的装饰者类)

示例代码:

 

  1. //被装饰者基类 
  2. interface Component 
  3. public function operation(); 
  4.  
  5. //装饰者基类 
  6. abstract class Decorator implements Component 
  7. protected $component
  8.  
  9. public function __construct(Component $component
  10. $this->component = $component
  11.  
  12. public function operation() 
  13. $this->component->operation(); 
  14.  
  15. //具体装饰者类 
  16. class ConcreteComponent implements Component 
  17. public function operation() 
  18. echo 'do operation'.PHP_EOL; 
  19.  
  20. //具体装饰类A 
  21. class ConcreteDecoratorA extends Decorator { 
  22. public function __construct(Component $component) { 
  23. parent::__construct($component); 
  24.  
  25.  
  26. public function operation() { 
  27. parent::operation(); 
  28. $this->addedOperationA(); // 新增加的操作 
  29.  
  30. public function addedOperationA() { 
  31. echo 'Add Operation A '.PHP_EOL; 
  32.  
  33. //具体装饰类B 
  34. class ConcreteDecoratorB extends Decorator { 
  35. public function __construct(Component $component) { 
  36. parent::__construct($component); 
  37.  
  38.  
  39. public function operation() { 
  40. parent::operation(); 
  41. $this->addedOperationB(); 
  42.  
  43. public function addedOperationB() { 
  44. echo 'Add Operation B '.PHP_EOL; 
  45.  
  46.  
  47. class Client { 
  48.  
  49. public static function main() { 
  50. /* 
  51. do operation 
  52. Add Operation A 
  53. */ 
  54. $decoratorA = new ConcreteDecoratorA(new ConcreteComponent()); 
  55. $decoratorA->operation(); 
  56.  
  57.  
  58. /* 
  59. do operation 
  60. Add Operation A  
  61. Add Operation B  
  62. */ 
  63. $decoratorB = new ConcreteDecoratorB($decoratorA); 
  64. $decoratorB->operation(); 
  65.  
  66.  
  67. Client::main(); 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表