PHP设计模式之装饰者模式代码实例


Posted in PHP onMay 11, 2015

定义:

装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。

角色:

Component(被装饰对象基类)
ConcreteComponent(具体被装饰对象)
Decorator(装饰者基类)
ContreteDecorator(具体的装饰者类)

示例代码:

//被装饰者基类
interface Component
{
  public function operation();
}
 
//装饰者基类
abstract class Decorator implements Component
{
  protected $component;
 
  public function __construct(Component $component)
  {
    $this->component = $component;
  }
 
  public function operation()
  {
    $this->component->operation();
  }
}
 
//具体装饰者类
class ConcreteComponent implements Component
{
  public function operation()
  {
    echo 'do operation'.PHP_EOL;
  }
}
 
//具体装饰类A
class ConcreteDecoratorA extends Decorator {
  public function __construct(Component $component) {
    parent::__construct($component);
 
  }
 
  public function operation() {
    parent::operation();
    $this->addedOperationA();  // 新增加的操作
  }
 
  public function addedOperationA() {
    echo 'Add Operation A '.PHP_EOL;
  }
}
 
//具体装饰类B
class ConcreteDecoratorB extends Decorator {
  public function __construct(Component $component) {
    parent::__construct($component);
 
  }
 
  public function operation() {
    parent::operation();
    $this->addedOperationB();
  }
 
  public function addedOperationB() {
    echo 'Add Operation B '.PHP_EOL;
  }
}
 
 
class Client {
 
  public static function main() {
    /*
    do operation
    Add Operation A
    */
    $decoratorA = new ConcreteDecoratorA(new ConcreteComponent());
    $decoratorA->operation();
 
 
    /*
    do operation
    Add Operation A 
    Add Operation B 
    */
    $decoratorB = new ConcreteDecoratorB($decoratorA);
    $decoratorB->operation();
  }
 
}
 
Client::main();
PHP 相关文章推荐
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
微博短链接算法php版本实现代码
Sep 15 PHP
php引用计数器进行垃圾收集机制介绍
Sep 19 PHP
php检测useragent版本示例
Mar 24 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 PHP
PHP基于imap获取邮件实例
Nov 11 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
php实现简单爬虫的开发
Mar 28 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
php好代码风格的阶段性总结
Jun 25 PHP
PHP上传图片类显示缩略图功能
Jun 30 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
PHP超牛逼无限极分类生成树方法
May 11 #PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 #PHP
PHP获取当前日期和时间及格式化方法参数
May 11 #PHP
PHP借助phpmailer发送邮件
May 11 #PHP
PHP date函数常用时间处理方法
May 11 #PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 #PHP
php.ini中的request_order推荐设置
May 10 #PHP
You might like
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
js中的闭包学习心得
2018/02/06 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
Python 用户登录验证的小例子
2013/03/06 Python
python中pygame模块用法实例
2014/10/09 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
Linux下多个Python版本安装教程
2018/08/15 Python
python实现汽车管理系统
2018/11/30 Python
python实现杨氏矩阵查找
2019/03/02 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
保险专业大专生求职信
2013/10/26 职场文书
企业办公室岗位职责
2014/03/12 职场文书
2014年度思想工作总结
2014/11/27 职场文书
八年级历史教学反思
2016/02/19 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
浅谈Python数学建模之线性规划
2021/06/23 Python