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的FTP学习(四)
Oct 09 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
Mar 23 PHP
PHP和MYSQL实现分页导航思路详解
Apr 11 PHP
PHP基于socket实现客户端和服务端通讯功能
Jul 13 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
Apr 02 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 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/06 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
跟老齐学Python之类的细节
2014/10/13 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
python读取LMDB中图像的方法
2018/07/02 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
旅游网创业计划书
2014/01/31 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
创业计划书详解
2019/07/19 职场文书
python 如何做一个识别率百分百的OCR
2021/05/29 Python