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


Posted in PHP onMay 11, 2015

定义:

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

角色:

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();
PHP 相关文章推荐
example1.php
Oct 09 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
ThinkPHP权限认证Auth实例详解
Jul 22 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
php求今天、昨天、明天时间戳的简单实现方法
Jul 28 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 PHP
php session_decode函数用法讲解
May 26 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 PHP
PhpSpreadsheet设置单元格常用操作汇总
Nov 13 PHP
PHP超牛逼无限极分类生成树方法
May 11 #PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 #PHP
PHP获取当前日期和时间及格式化方法参数
May 11 #PHP
PHP借助phpmailer发送邮件
May 11 #PHP
PHP date函数常用时间处理方法
May 11 #PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 #PHP
php.ini中的request_order推荐设置
May 10 #PHP
You might like
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
Vue组件tree实现树形菜单
2017/04/13 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
wxPython实现列表增删改查功能
2019/11/19 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
新闻专业毕业生求职信
2014/08/08 职场文书
迎七一演讲稿
2014/09/12 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
诉讼和解协议书
2016/03/23 职场文书
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL