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 相关文章推荐
页面乱码问题的根源及其分析
Aug 09 PHP
浅析echo(),print(),print_r(),return之间的区别
Nov 27 PHP
PHP mail()函数使用及配置方法
Jan 14 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
Yii2 rbac权限控制操作步骤实例教程
Apr 29 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
Mar 04 PHP
laravel5实现微信第三方登录功能
Dec 06 PHP
如何用PHP实现多线程编程
May 26 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中抽象类和接口的概念以及区别
2013/06/27 PHP
php写的AES加密解密类分享
2014/06/20 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
2019/05/28 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
Python中使用中文的方法
2011/02/19 Python
python实现图片批量剪切示例
2014/03/25 Python
python自动化测试之setUp与tearDown实例
2014/09/28 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
幼儿园中班教学反思
2014/02/10 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
出国留学担保书
2014/05/20 职场文书
五水共治一句话承诺
2014/05/30 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
2015年暑假工作总结
2015/07/13 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
MySQL连接控制插件介绍
2021/09/25 MySQL
2022漫威和DC电影上映作品
2022/04/05 欧美动漫