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

 2025-01-15  阅读 360  评论 8  点赞 182

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

定义:

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

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

角色:

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();


标签:phpphp教程

评论列表:

  •   weihang233
     发布于 2天前回复该评论
  • 写的很不错,学到了!
显示更多评论

发表评论:

管理员

承接各种程序开发,外贸网站代运营,外贸网站建设等项目
  • 内容2460
  • 积分67666
  • 金币86666

Copyright © 2024 LS'Blog-保定PHP程序员老宋个人博客 Inc. 保留所有权利。 Powered by LS'blog 3.0.3

页面耗时0.0270秒, 内存占用1.93 MB, 访问数据库28次

冀ICP备19034377号