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 HTML代码串截取代码
Dec 29 PHP
Godaddy空间Zend Optimizer升级方法
May 10 PHP
PHP中读写文件实现代码
Oct 20 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
PHP生成plist数据的方法
Jun 16 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
Smarty变量用法详解
May 11 PHP
php连接oracle数据库的核心步骤
May 26 PHP
php实现简单加入购物车功能
Mar 07 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
Smarty模板语法详解
Jul 20 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批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
js根据日期判断星座的示例代码
2014/01/23 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
Three.js基础部分学习
2017/01/08 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
python访问sqlserver示例
2014/02/10 Python
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
Python龙贝格法求积分实例
2020/02/29 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
Gap英国官网:Gap UK
2018/07/18 全球购物
教师对学生的评语
2014/04/28 职场文书
护林防火标语
2014/06/27 职场文书
教书育人演讲稿
2014/09/11 职场文书
分居协议书范本
2014/11/03 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
PyMongo 查询数据的实现
2021/06/28 Python