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与ASP
Oct 09 PHP
isset和empty的区别
Jan 15 PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
php绘图中显示不出图片的原因及解决
Mar 05 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
Apr 01 PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
php编写简单的文章发布程序
Jun 18 PHP
PHP使用反射机制实现查找类和方法的所在位置
Apr 22 PHP
php进行ip地址掩码运算处理的方法
Jul 11 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
Python3基础之输入和输出实例分析
2014/08/18 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
python的flask框架难学吗
2020/07/31 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
实习老师离校感言
2014/02/03 职场文书
葬礼司仪主持词
2014/03/31 职场文书
超市开店计划书
2014/09/15 职场文书
2014年党总支工作总结
2014/12/18 职场文书
学习与创新自我评价
2015/03/09 职场文书
冰雪公主观后感
2015/06/16 职场文书
网络舆情信息简报
2015/07/21 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js