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 如何向 MySQL 发送数据
Oct 09 PHP
php运行出现Call to undefined function curl_init()的解决方法
Nov 02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
PHP获取网站中各文章的第一张图片的代码示例
May 20 PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP strripos函数用法总结
Feb 11 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
php输入流php://input使用浅析
2014/09/02 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
js TextArea的选中区域处理
2010/12/28 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
Python从零开始创建区块链
2018/03/06 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
Python字典底层实现原理详解
2019/12/18 Python
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
导游词之襄阳古城
2019/09/27 职场文书
vue+iview实现手机号分段输入框
2022/03/25 Vue.js
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python