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数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
php地址引用(php地址引用的效率问题)
Mar 23 PHP
深入探讨<br />和 \r\n两者有什么区别??
Jun 05 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
高质量PHP代码的50个实用技巧必备(上)
Jan 22 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 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生成缩略图的代码
2011/01/12 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
斜45度寻路实现函数
2009/08/20 Javascript
javascript 节点排序 2
2011/01/31 Javascript
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
详解vue 命名视图
2019/08/14 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python 正则式使用心得
2009/05/07 Python
为Python的web框架编写前端模版的教程
2015/04/30 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
Python实现ping指定IP的示例
2018/06/04 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
物业客服专员岗位职责
2013/11/30 职场文书
学校招生宣传广告词
2014/03/19 职场文书
食品安全责任书
2014/04/15 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
党员作风建设自查报告
2014/10/23 职场文书
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
vue实现Toast组件轻提示
2022/04/10 Vue.js