PHP 装饰器模式
装饰器模式:是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。
【装饰器模式中主要角色】
抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这些对象动态地添加职责。
具体组件角色(ConcreteComponent) :被装饰者,定义一个将要被装饰增加功能的类。可以给这个类的对象添加一些职责
抽象装饰器(Decorator):维持一个指向构件Component对象的实例,并定义一个与抽象组件角色Component接口一致的接口
具体装饰器角色(ConcreteDecorator):向组件添加职责。
【原型模式PHP示例】
interface Component{                             # 抽象组件角色
    public function display();
}
class Person implements Component {    # 具体主键  被装饰者
    public function display()
    {
        echo "我要穿衣服了<br/>";
    }
}
class Clothes  implements Component {   # 抽象装饰者
    protected $obj;
    public function __construct($obj)
    {
        $this->obj = $obj;
    }
    public function display()
    {
        if($this->obj){
            $this->obj->display();
        }
    }
}
class Trousers extends Clothes{           # 具体装饰者
    public function display()
    {
        parent::display();
        echo "穿裤子<br/>";
    }
}
class Tshirt extends Clothes{
    public function display()
    {
        parent::display();
        echo "穿体恤<br/>";
    }
}
$person = new  Person();
$person = new Trousers($person);
$person = new Tshirt($person);
$person->display();
输出:
我要穿衣服了
穿裤子
穿体恤
PHP 装饰器模式的更多相关文章
- 设计模式-装饰器模式(Decrator Model)
		
文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6057666.html 目录 1.概述 2.目的 3.结构组成 4.实现 5.总结 1.概 ...
 - php设计模式  装饰器模式
		
装饰器模式,可以动态地添加修改类的功能. 一个类提供了一项功能,如果要修改并添加额外的功能,传统的编程模式需要写一个子类继承它,并重新实现类的方法.使用装饰器模式,仅需要在运行时添加一个装饰器对象即可 ...
 - Java设计模式12:装饰器模式
		
装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能, ...
 - 说说设计模式~装饰器模式(Decorator)
		
返回目录 装饰器模式,也叫又叫装饰者模式,顾名思义,将一个对象进行包裹,包装,让它变成一个比较满意的对象,这种模式在我们平时项目开发中,经常会用到,事实上,它是处理问题的一种技巧,也很好的扩展了程序, ...
 - 说说设计模式~装饰器模式(Decorator)~多功能消息组件的实现
		
返回目录 为何要设计多功能消息组件 之前写过一篇装饰器模式的文章,感觉不够深入,这次的例子是实现项目中遇到的,所以把它拿出来,再写写,之前也写过消息组件的文章,主要采用了策略模式实现的,即每个项目可以 ...
 - (十)装饰器模式详解(与IO不解的情缘)
		
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. LZ到目前已经写了九个设计模 ...
 - 【PHP设计模式 09_ZhuangShiQi.php】装饰器模式 (decorator)
		
<?php /** * [装饰器模式 (decorator)] * 有时候发布一篇文章需要经过很多人手,层层处理 */ header("Content-type: text/html; ...
 - IOS设计模式之二(门面模式,装饰器模式)
		
本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...
 - 装饰器模式(Decorator)
		
转自http://blog.csdn.net/hust_is_lcd/article/details/7884320 1.认识装饰器模式 装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象 ...
 
随机推荐
- maven-sprigmvc-mybatis配置
			
pom.xml配置 <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.ap ...
 - ES6之let命令详解
			
let与块级作用域 { var foo='foo'; let bar='bar'; } console.log(foo,'var'); //foo varconsole.log(bar ,'bar') ...
 - Spring异步功能
			
使用 Spring 的异步功能时,实质是使用的 Servlet3 及以上版本的异步功能. Spring 的异步处理机制需要在 web.xml 中全部的 servlet 和 filter 处配置 < ...
 - 史上最全Windows版本搭建安装React Native环境配置
			
史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...
 - 戴尔灵越15-5000/3558等系列修改BIOS设置U盘启动
			
今天在电脑群遇到一个群友的机型是戴尔灵越15-5000,他问我这款机器怎么设置U盘启动. 看到它的BIOS界面之后,我来了点兴趣.. 本文供图:辽宁沈阳-打老虎(921407164) 电脑群:电脑爱好 ...
 - 修改策略组/注册表 屏蔽Win10升级解决方法
			
一.Windows非家庭版 第1步:按Win+R键调出运行对话框,输入命令“gpedit.msc”,按回车键启动组策略编辑器. 第2步:依次定位到“计算机配置→管理模板→Windows组件→Windo ...
 - C# 深拷贝的具体代码的封装与调用
			
先封装下实现方法: public class DeepClone { public static object CopyObject(Object obj) { if (obj == null) { ...
 - 如何调用Google地图?
			
在建设网站中用到地图是很常见的,在国内大部分都是用百度地图,但是有时候可能会用到国外地址,这时候就只能使用谷歌地图了. 方法一.使用框架引入谷歌地图 用框架引入谷歌地址是最简单的方法,不是专业开发人员 ...
 - MVC5 网站开发之三 数据存储层功能实现
			
数据存储层在项目Ninesky.DataLibrary中实现,整个项目只有一个类Repository. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 ...
 - DM9000驱动移植在mini2440(linux2.6.29)和FS4412(linux3.14.78)上的实现(deep dive)篇一
			
关于dm9000的驱动移植分为两篇,第一篇在mini2440上实现,基于linux2.6.29,也成功在在6410上移植了一遍,和2440非常类似,第二篇在fs4412(Cortex A9)上实现,基 ...