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安装为Apache DSO
Oct 09 PHP
一个简单计数器的源代码
Oct 09 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php实现的ping端口函数实例
Nov 12 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
php实现的IMEI限制的短信验证码发送类
May 05 PHP
php函数重载的替代方法--伪重载详解
May 08 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
Jul 06 PHP
thinkPHP中_initialize方法实例分析
Dec 05 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中smarty实现多模版网站的方法
2015/06/11 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
bootstrap table表格客户端分页实例
2017/08/07 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
三年大学生活自我鉴定
2014/01/21 职场文书
开服装店计划书
2014/08/15 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
远程培训的心得体会
2014/09/01 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书