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强制下载类型的实现代码
Apr 21 PHP
php的dl函数用法实例
Nov 06 PHP
phpstorm配置Xdebug进行调试PHP教程
Dec 01 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
Yii2主题(Theme)用法详解
Jul 23 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
PHP API接口必备之输出json格式数据示例代码
Jun 27 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
详解thinkphp中的volist标签
Jan 15 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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中bind_param()函数用法分析
2017/03/28 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
jQuery实现磁力图片跟随效果完整示例
2016/09/16 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
python数据结构之链表的实例讲解
2017/07/25 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
什么是测试驱动开发(TDD)
2012/02/15 面试题
介绍一下Ruby的多线程处理
2013/02/01 面试题
七一党建活动方案
2014/01/28 职场文书
五水共治一句话承诺
2014/05/30 职场文书
民事起诉状范文
2015/05/19 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers