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数据库操作类代码(增,删,改,查)
Apr 08 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
php中读写文件与读写数据库的效率比较分享
Oct 19 PHP
PHP 函数call_user_func和call_user_func_array用法详解
Mar 02 PHP
php超快高效率统计大文件行数
Jul 05 PHP
PHP MVC框架路由学习笔记
Mar 02 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
PHP中overload与override的区别
Feb 13 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
PHP使用Redis长连接的方法详解
Feb 12 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
解析zend Framework如何自动加载类
2013/06/28 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
简单实现python收发邮件功能
2018/01/05 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
老公保证书范文
2014/04/29 职场文书
服装设计专业自荐信
2014/06/17 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
内乡县衙导游词
2015/02/05 职场文书
安全主题班会教案
2015/08/12 职场文书
防震减灾主题班会
2015/08/14 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS