设计模式入门-装饰器模式(php版)
来源:互联网 发布:php找工作 编辑:程序博客网 时间:2024/05/18 02:58
场景:一个朋友开了家咖啡店,供应了各种类型的咖啡,最初系统的设计如下uml类图所示:
Change:咖啡里面可以加很多调料,比如冰、糖、牛奶等,这些调料需要额外收费,按照之前的设计,我们如果想要得到每种咖啡的费用,我们就得新建六个类来实现,对应的类图如下:
Problem:试想调料有n种,咖啡有m种,难道我们要设计m*n个类来实现要求吗?
解决方案:
一、 不为每种调料设计一个新类,而是将其作为咖啡类的一个属性存在,最后根据咖啡是否具有该属性来计算价钱,具体类图如下:
这种方法看上去完美解决了需要创建多个类的弊端,但是没有解决一下问题:
1、 如果我想要双份牛奶咖啡,这种方式明显不能计算出应有的价钱
2、 违背了设计思想中“对扩展开放,对修改关闭的原则”
二、将调料独立出来,当做咖啡的“装饰物”,具体uml类图如下所示:
装饰器模式的官方解释是:动态的将责任附加到对象上,想要扩张功能,装饰着提供有别于继承的另一种选择。
这个设计模式给我们怎样的启发呢?那就是设计原则之一:对扩展开放,对修改关闭。
源码下载:http://www.walk-sing.com/decorate装饰器模式.zip
原文链接:http://www.walk-sing.com/?p=289
0 0
- 设计模式入门-装饰器模式(php版)
- PHP设计模式-装饰器模式
- PHP设计模式-装饰器模式
- php设计模式之装饰器模式
- 【设计模式】之装饰器模式-PHP
- PHP设计模式之装饰器模式
- PHP设计模式之装饰器模式
- PHP 设计模式之装饰器模式
- 【设计模式】之装饰器模式(二)-PHP
- PHP设计模式:装饰模式
- 慕课网----大话PHP设计模式 五(原型模式,装饰器模式,迭代器模式,代理模式)
- PHP设计模式系列 - 装饰器
- PHP设计模式系列 - 装饰器
- PHP设计模式系列 - 装饰器
- php设计模式之装饰器
- php设计模式专题附源码(解释器模式、工厂方法模式、外观模式、装饰模式、建造者模式)
- 设计模式(二):装饰器模式
- 设计模式(十)装饰器模式
- PHP学习笔记(七)文件系统
- [POJ] DNA Sorting
- Java中ArrayList和LinkedList区别
- C语言调试宏技巧
- java security code guider line
- 设计模式入门-装饰器模式(php版)
- 在远程桌面连接中,可以使用哪些快捷键?
- SVN版本控制
- IQueryable与IEnumberable的区别
- 如何在线将ppt转换成pdf
- java 时间工具类
- 天声人語 20150323
- 日经春秋 20150323
- springMVC4配置Log4j