首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP设计模式——装饰器模式

装饰器为子类扩展功能提供了非常灵活的替代方案。 咖啡深受人们的喜爱。咖啡的香气、味道和能力增强足以开启人们美好的一天。这就难怪为什么星巴克和咖啡豆这样的咖啡店在生意上可以做得这么好。...这时装饰者模式就是派上用场的时候。我们将创建装饰器类,向咖啡对象添加调味品。...首先,让我们创建一个将牛奶添加到咖啡中的装饰器类: class WithMilkDecorator implements Beverage { private $_coffee = null;...而且,装饰器模式(Decorator Pattern)在运行时向包装类添加了附加功能,因此与通过子类进行继承相比,添加/删除功能很灵活。...在我们的示例中,装饰器模式(Decorator Pattern)将附加职责(牛奶调味品,糖调味品和奶油调味品)动态地附加到对象(咖啡对象)上。装饰器为子类提供了灵活的替代方案,以扩展功能。

43600
您找到你想要的搜索结果了吗?
是的
没有找到

php设计模式】装饰器模式

装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。其结构图如下: ? Component为统一接口,也是装饰类和被装饰类的基本类型。...ConcreteComponent为具体实现类,也是被装饰类,他本身是个具有一些功能的完整的类。...而Decorator本身,通常采用默认实现,他的存在仅仅是一个声明:我要生产出一些用于装饰的子类了。而其子类才是赋有具体装饰效果的装饰产品类。...ConcreteDecorator是具体的装饰产品类,每一种装饰产品都具有特定的装饰效果。可以通过构造器声明装饰哪种类型的ConcreteComponent,从而对其进行装饰。 <?...php /** *装饰器模式 **/ interface Component{ public function operation(); } class ConcreteComponent

31730

PHP设计模式之装饰器模式

PHP设计模式之装饰器模式 工厂模式告一段落,我们来研究其他一些模式。不知道各位大佬有没有尝试过女装?据说女装大佬程序员很多哟。其实,今天的装饰器模式就和化妆这件事很像。...PHP_EOL; } } 两个具体装饰者。在这里我是涂了两次霜,毕竟是纯爷们,对化妆这事儿真的是不了解。好像第一步应该先是打粉底吧?...这时,我们可以用装饰器模式来对老系统的短信模板进行包装。其实说简单点,我们就是用装饰器来做文本替换的功能。好处呢?当然是可以不去改动原来的模板类中的方法就实现了对老模板内容的修改扩展等。...PHP_EOL; } } } $template = new CouponMessageTemplate(); $message = new Message(); // 老系统...:一是不改变原有代码的情况下对原有代码中的内容进行扩展,开放封闭原则;二是每个装饰器完成自己的功能,单一职责;三是用组合实现了继承的感觉; 最适用于:给老系统进行扩展 要小心:过多的装饰者会把你搞晕的

74330

PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解

本文实例讲述了PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用。...,给原先的数据进行了装修 装饰器模式有些像适配器模式,但是一定要注意,装饰器主要是不改变现有对象数据结构的前提 代码如下: UserInfo.php //装饰器模式,对已有对象的部分内容或者功能进行调整...#装饰器接口 |—-colorDecorator.php #颜色装饰器 |—-sizeDecorator.php #字体大小装饰器 |—-echoText.php #被装饰者 |–index.php...#单一的入口文件 完事就是来构建装饰器接口,Think/decorator.php,如下: <?...php /** * 被装饰者 */ namespace Think; class echoText { protected $decorator = array(); //存放装饰器 //装饰方法

46431

PHP设计模式之装饰者模式 转

介绍 装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 思维导图 ? 有这样一个项目,做一个餐厅订餐系统。起初的代码结构是这样的。...php abstract class Beverage{     public $_name;     abstract public function Cost(); } // 被装饰者类 class...目的是装饰者必须取代被装饰者。 2.添加行为:当装饰者和组件组合时,就是在加入新的行为。 题外话: 1.利用继承设计子类行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。...4.装饰模式为设计注入弹性,但同时会在设计中加入大量的小类,这偶尔会导致别人不容易了解这种设计。 5.在使用装饰者模式的时候,对插入的的装饰者要特别小心。...因为装饰者模式依赖某种特定的类型(Beverage)。 6.要想很好的使用装饰者模式,我们还要配合使用工厂模式和生成器模式,但今天只说装饰者模式。要想知道更多,请听下回分解。

33820

php设计模式(十一):装饰器模式(Decorator)

装饰器模式 装饰器模式又称:装饰者模式、Wrappe、Decorator。装饰是一种结构型设计模式,允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。...问题 装饰器模式就如生活中的装饰或者配料一样,一级一级包装。...结构 MilkTea:原本的对象和装饰共同的接口 示例中指:奶茶 Oolong、Latte: 原本的对象 示例中指:声声乌龙、幽兰拿铁 Decorator: 实现接口的装饰抽象类 Cream、…:具体的装饰...PHP_EOL; PHP Copy 输出 幽兰拿铁+ 奶油+ 开心果 25元 声声乌龙+ 奶油+ 奶油+ 奶油 28元 UML 优缺点 优点 无需创建新子类即可扩展对象的行为。...可以用多个装饰封装对象来组合几种行为。 单一职责原则。可以将实现了许多不同行为的一个大类拆 分为多个较小的类。 缺点 在封装器栈中删除特定封装器比较困难。 实现行为不受装饰栈顺序影响的装饰比较困难。

15230

php设计模式(十一):装饰器模式(Decorator)

装饰器模式 装饰器模式又称:装饰者模式、Wrappe、Decorator。装饰是一种结构型设计模式,允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。...问题 装饰器模式就如生活中的装饰或者配料一样,一级一级包装。...结构 MilkTea:原本的对象和装饰共同的接口 示例中指:奶茶 Oolong、Latte: 原本的对象 示例中指:声声乌龙、幽兰拿铁 Decorator: 实现接口的装饰抽象类 Cream、…:具体的装饰...PHP_EOL; /** * 点一杯加三个奶油的声声乌龙(因为我比较喜欢喝奶油) */ $oolong = new Oolong(); $cream = new Cream($oolong);...PHP_EOL; 输出 幽兰拿铁+ 奶油+ 开心果 25元 声声乌龙+ 奶油+ 奶油+ 奶油 28元 UML 优缺点 优点 无需创建新子类即可扩展对象的行为。

32420

php装饰者模式简单应用案例分析

本文实例讲述了php装饰者模式简单应用。分享给大家供大家参考,具体如下: 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。...它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 示例: A、B、C编辑同一篇文章。...obj传递上一个操作的对象, //来实现对同一个对象进行连续操作 运行结果: 你好 编辑A新写的内容 编辑B新写的内容 编辑C新写的内容你好 编辑B新写的内容 编辑A新写的内容 更多关于PHP...相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string...)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家PHP程序设计有所帮助。

24941

php设计模式之装饰模式应用案例详解

本文实例讲述了php设计模式之装饰模式。分享给大家供大家参考,具体如下: 介绍 装饰者模式(Decorator Pattern)允许你向一个现有的对象添加新的功能,同时又不改变其结构。...,不会相互耦合,装饰模式是继承的一个代替模式,装饰模式可以动态扩展一个实现类的功能。...缺点: 多层装饰比较负责。...更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串...(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家PHP程序设计有所帮助。

34730

需加装饰——装饰模式

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。...截止到Decorate部分,左上部分完全与组合模式相同,Decorate类是装饰类的核心类。...由于装饰模式中所有新增的类都是构建类的子类,并且他们每个类都声明了以构建类对象为参数的构造函数,因此,具体装饰类可以直接套用拓展,正如以上代码所示。...装饰模式,符合了面向对象设计原则“对修改关闭,对拓展开放”的原则。在原有代码完全不改动的情况下,可以有效拓展系统功能。...在JavaIO中,装饰模式得到了广泛使用。

76330

php挂Q系统

php挂Q系统 作者:matrix 被围观: 2,147 次 发布时间:2013-04-18 分类:兼容并蓄 | 评论被关闭了 这是一个创建于 3423 天前的主题,其中的信息可能已经有所发展或是发生改变...3个挂Q系统php源码 最早界面稍微好看的挂q系统 来自52gq的源码 [php] 这款很简洁,不会占用sql数据库 只是需要手动回去挂Qsid yunfile下载: wap在线挂q.zip 百度网盘...生成的db.inc.php 可复制给手机版(手机版不支持安装) 心挂Q提供程序 - 无心问世&IZZX     程序制作 by  52挂Q 傻妞挂Qx1.5.9_破解优化版 [php+mysql]...忘了哪位分享的这收费版挂Q系统 安装时需要进入install目录。...例如:http://xxx.com/install 需要连接sql数据库 此款系统会记录QQ的明文密码,So 有点邪恶啊~  yunfile下载: qq.zip 百度网盘:http://pan.baidu.com

1.5K20

PHP设计模式(八)装饰器模式Decorator实例详解【结构型】

本文实例讲述了PHP设计模式:装饰器模式Decorator。分享给大家供大家参考,具体如下: 1....可以用添加和分离的方法,用装饰在运行时刻增加和删除职责。相比之下,继承机制要求为每个添加的职责创建一个新的子类。这会产生许多新的类,并且会增加系统的复杂度。...4) 有许多小对象 采用Decorator模式进行系统设计往往会产生许多看上去类似的小对象,这些对象仅仅在他们相互连接的方式上有所不同,而不是它们的类或是它们的属性值有所不同。...尽管对于那些了解这些系统的人来说,很容易对它们进行定制,但是很难学习这些系统,排错也很困难。 8. 实现 使用《php设计模式》里面的例子。 看看以下例子,你可以更好的理解这种观点。...我们使用装饰器代码: <?php /** * 装饰器模式的组成: * 抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这些对象动态地添加职责。

61020
领券