php装饰者模式简单应用案例分析


Posted in PHP onOctober 23, 2019

本文实例讲述了php装饰者模式简单应用。分享给大家供大家参考,具体如下:

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

示例:

A、B、C编辑同一篇文章。

class Article{
  protected $content;
  public function __construct($info){
    $this->content = $info;
  }
}
class editor_A extends Article{
  public function __construct(Article $obj){
    $this->content = $obj->content . '<br/>' . '编辑A新写的内容';
  }
  public function decorator(){
    return $this->content;
  }
}
class editor_B extends Article{
  public function __construct(Article $obj){
    $this->content = $obj->content . '<br/>' . '编辑B新写的内容';
  }
  public function decorator(){
    return $this->content;
  }
}
class editor_C extends Article{
  public function __construct(Article $obj){
    $this->content = $obj->content . '<br/>' . '编辑C新写的内容';
  }
  public function decorator(){
    return $this->content;
  }
}
$artCls = new Article('你好');
//编辑A先秀修改,然后编辑B修改,然后编辑C修改
$a = new editor_A($artCls);
$b = new editor_B($a);
$c = new editor_C($b);
echo $c->decorator();
//编辑B先秀修改,然后编辑A修改
$b = new editor_B($artCls);
$a = new editor_A($b);
echo $a->decorator();
//重点是传递参数的地方,使用Article $obj传递上一个操作的对象,
//来实现对同一个对象进行连续操作

运行结果:

你好
编辑A新写的内容
编辑B新写的内容
编辑C新写的内容你好
编辑B新写的内容
编辑A新写的内容

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP如何编写易读的代码
Jul 10 PHP
php连接mysql数据库代码
Mar 10 PHP
php 表单验证实现代码
Mar 10 PHP
php 文件缓存函数
Oct 08 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
PHP合并数组+号和array_merge的区别
Jun 25 PHP
php实现用户注册密码的crypt加密
Jun 08 PHP
php实现记事本案例
Oct 20 PHP
PHP大文件分割分片上传实现代码
Dec 09 PHP
laravel 数据验证规则详解
Oct 23 #PHP
php适配器模式简单应用示例
Oct 23 #PHP
Laravel 自定命令以及生成文件的例子
Oct 23 #PHP
laravel 创建命令行命令的图文教程
Oct 23 #PHP
php桥接模式应用案例分析
Oct 23 #PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 #PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 #PHP
You might like
php 删除cookie和浏览器重定向
2009/03/16 PHP
PHP中数组的分组排序实例
2014/06/01 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
Node.js实现在目录中查找某个字符串及所在文件
2014/09/03 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
python读取html中指定元素生成excle文件示例
2014/04/03 Python
Python检测QQ在线状态的方法
2015/05/09 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
学python需要去培训机构吗
2020/07/01 Python
python 用struct模块解决黏包问题
2020/11/07 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
您的时尚,您的生活方式:DTLR Villa
2019/12/25 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
servlet面试题
2012/08/20 面试题
中学生爱国演讲稿
2013/12/31 职场文书
优秀教师先进材料
2014/12/16 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis