当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-26 15:04:21 浏览: 评论:0 

这篇文章主要介绍了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.   { 
  11.     $this->component = $component
  12.   } 
  13.    
  14.   public function operation() 
  15.   { 
  16.     $this->component->operation(); 
  17.   } 
  18.    
  19. //具体装饰者类 
  20. class ConcreteComponent implements Component 
  21.   public function operation() 
  22.   { 
  23.     echo 'do operation'.PHP_EOL; 
  24.   } 
  25.    
  26. //具体装饰类A 
  27. class ConcreteDecoratorA extends Decorator { 
  28.   public function __construct(Component $component) { 
  29.     parent::__construct($component); 
  30.    
  31.   } 
  32.    
  33.   public function operation() { 
  34.     parent::operation(); 
  35.     $this->addedOperationA();  // 新增加的操作 
  36.   } 
  37.    
  38.   public function addedOperationA() { 
  39.     echo 'Add Operation A '.PHP_EOL; 
  40.   } 
  41.    
  42. //具体装饰类B 
  43. class ConcreteDecoratorB extends Decorator { 
  44.   public function __construct(Component $component) { 
  45.     parent::__construct($component); 
  46.    
  47.   } 
  48.    
  49.   public function operation() { 
  50.     parent::operation(); 
  51.     $this->addedOperationB(); 
  52.   } 
  53.    
  54.   public function addedOperationB() { 
  55.     echo 'Add Operation B '.PHP_EOL; 
  56.   } 
  57.    
  58.    
  59. class Client { 
  60.    
  61.   public static function main() { 
  62.     /* 
  63.     do operation 
  64.     Add Operation A 
  65.     */ 
  66.     $decoratorA = new ConcreteDecoratorA(new ConcreteComponent()); 
  67.     $decoratorA->operation(); 
  68.    
  69.    
  70.     /* 
  71.     do operation 
  72.     Add Operation A  
  73.     Add Operation B  
  74.     */ 
  75.     $decoratorB = new ConcreteDecoratorB($decoratorA); 
  76.     $decoratorB->operation(); 
  77.   } 
  78.    
  79.    
  80. Client::main();

Tags: PHP设计模式 PHP装饰者模式

分享到: