文档章节

php设计模式之装饰器模式

别人说我名字很长
 别人说我名字很长
发布于 2016/02/13 10:09
字数 295
阅读 30
收藏 0
<?php

namespace Tools;

    /*
    装饰器模式
    装饰器模式(decorator),可以动态的添加修改类的功能
    一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法
    使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性。
    */

//装饰器接口
interface Decorator{
    public function before();
    public function after();
}

//颜色的装饰器
class ColorDecorator implements \Tools\Decorator{
    private $color;
    public function __construct($color="chocolate")
    {
        $this->color = $color;
    }

    public function before(){
        return "<div style=\"background-color: {$this->color};\">";
    }

    public function after(){
        return '</div>';
    }
}

//字体的装饰器
class SizeDecorator implements \Tools\Decorator{
    private $size;
    public function __construct($size="16px")
    {
        $this->size = $size;
    }

    public function before(){
        return "<span style='font-size:{$this->size};'>";
    }

    public function after(){
        return '</span>';
    }
}

//使用装饰器
class draw{

    private $decorators = array();

    public function addDecorator(\Tools\Decorator $decorator){
        $this->decorators[] = $decorator;
    }

    public function before(){
        foreach($this->decorators as $docorator){
            echo $docorator->before();
        }
    }

    public function after(){
        $decorators = array_reverse($this->decorators);
        foreach($decorators as $decorator){
            echo $decorator->after();
        }
    }

    public function show(){
        $this->before();
        echo '这里是内容输出';
        $this->after();
    }
}

//在运行时添加装饰器对象
$d = new \Tools\draw();
$d->addDecorator(new \Tools\ColorDecorator("#f00"));
$d->addDecorator(new \Tools\SizeDecorator("16px"));
$d->show();



© 著作权归作者所有

共有 人打赏支持
别人说我名字很长
粉丝 55
博文 255
码字总数 105359
作品 0
济南
程序员
私信 提问
《PHP设计模式大全》系列分享专栏

《PHP设计模式大全》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201739.html 文章 php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页...

kaixin_code
11/06
0
0
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
228
2
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
06/24
0
0
设计模式已经陨落了?

你现在是坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你...

oschina
2014/03/11
9.1K
69
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

图片无限轮播

<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, max......

shawnDream
5分钟前
0
0
js 在==时,则会有一些让人难以理解的陷阱

在==时,则会有一些让人难以理解的陷阱。 (function () { var undefined; undefined == null; // true 1 == true; //true 2 == true; // false 0 == false; // true 0 == ''; // true NaN ==......

之渊
7分钟前
1
0
前后端分离之JWT用户认证

参考资料 1、前后端分离之JWT用户认证

哎小艾
12分钟前
0
0
TiDB 在量化派风控系统中的应用

作者:朱劲松,量化派研发中心系统架构师,主要参与了基础组件开发、API Gateway 等项目,现在致力于公司风控系统相关业务的架构设计和研发。 一、公司简介 量化派(QuantGroup)创办于 2014...

TiDB
14分钟前
0
0
Spring Cloud Feign 异常处理

问题 最近在项目开发中,使用 Feign 调用服务,当触发熔断机制时,遇到了以下问题: 异常信息形如:TestService#addRecord(ParamVO) failed and no fallback available.; 获取不到服务提供方...

xiaomin0322
27分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部