文档章节

php设计模式之装饰器模式

别人说我名字很长
 别人说我名字很长
发布于 2016/02/13 10:09
字数 295
阅读 25
收藏 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
博文 250
码字总数 101239
作品 0
济南
程序员
javascript 设计模式之工厂(Factory)模式

工厂模式介绍 工厂模式是一个创建型的模式,主要就是创建对象。其中工厂模式又分为简单工厂模式和抽象工厂模式。简单工厂模式是通过工厂方法确定创建 对应类型的对象。抽象工厂模式是通过子类...

hlxiong
2014/04/14
0
0
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0
代理模式(Proxy Pattern):动态代理 - 最易懂的设计模式解析

前言 今天我来全面总结开发中最常用的设计模式 - 代理模式中的动态代理模式 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(Sim...

Carson_Ho
04/09
0
0
【设计模式笔记】(十六)- 代理模式

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

MrTrying
06/24
0
0
JavaScript 中常见设计模式整理

开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式。本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知。 JavaScript 中...

牧云云
05/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Zookeeper总结

Zookeeper的部分概念 什么是zookeeeper? Zookeeper是一个分布式服务的协调中心 zookeeper节点的角色类型? Leader(领导者)、Follower(跟随者)、Observer(观察者) Leader 负责更新系统...

DemonsI
17分钟前
0
0
Redis学习笔记

常用命令 从Docker进入Redis的命令 sudo docker exec -it redis /bin/bash

OSC_fly
18分钟前
0
0
SqlServer查询某个日期的数据

select * from View_ZJMONITORINGCORROSION where ENTERDATE > CONVERT(datetime,DATEADD(day,1,'2017/12/28 14:53:07'))...

笑丶笑
19分钟前
0
0
常用编码规范

Standard characters https://ascii.cl/

yeahlife
21分钟前
0
0
flannel实战

docker swarm mode的出现是个里程碑,官方原生的编排调度看起来都成雏形了,但是swarm mode和容器外部系统的对接、网络性能始终不尽人意,swarm mode下各种开源周边不能使用,感觉swarm mod...

China_OS
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部