目录
-
- 星巴兹咖啡的故事
- 装饰者模式
-
- 一、模式介绍
- 二、模式实现
- 三、模式设计
- 四、模式的优缺点
- 五、使用场景:
- 六、装饰者用到的设计原则:
星巴兹咖啡的故事
-
现在有一个咖啡馆,他有一套自己的订单系统,当顾客来咖啡馆的时候,可以通过订单系统来点自己想要的咖啡。他们原先的设计是这样子的:
-
这时,有个人提出了新的方案,利用实例变量和继承,来追踪这些调料。具体为:先从Beverage基类下手,加上实例变量代表是否加上调料(牛奶、豆浆、摩卡、奶泡……)
装饰者模式
一、模式介绍
??装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
??这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
??我们通过下面的实例来演示装饰器模式的用法。
二、模式实现
以摩卡和奶泡深焙咖啡为例:
步骤:
- 拿到一个深焙咖啡(DarkRoast)对象
- 以摩卡(Mocha)对象去装饰它
- 以奶泡(Whip)对象去装饰它
- 调用 cost() 方法
图示步骤:
- 拿到一个深焙咖啡(DarkRoast)对象
- 顾客要奶泡(Whip),所以建立 Whip 对象,并用它将以 Mocha 装饰的 DarkRoast 对象装起来
三、模式设计
装饰者模式的模板类图:
Beverage : 抽象饮料类
具体饮料类:被装饰者,包括:独家调配的咖啡(HouseBlend)、深焙咖啡(DarkRoast)、浓缩咖啡(Espresso)、低咖啡因咖啡类(Decaf)
Dector : 装饰者共同实现的接口
ConcreteDecorator : 具体的装饰者,包括:牛奶(Milk)、摩卡(Mocha)、豆浆(Soy)、奶泡(Whip)
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!