码迷,mamicode.com
首页 > 其他好文 > 详细

《Head First-Chapter3》装饰者模式

时间:2016-04-29 16:05:10      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

给爱用继承的人一个全新的设计眼界

-----装饰者模式

一、问题描述:不同口味的星巴克

1、咖啡加配料

           技术分享
点咖啡时,可以加配料或不加,星巴克会根据所加入的调料收取不同的费用。
如:来一杯深焙咖啡,加摩卡和奶泡,一共99+20+10 = 129

2、糟糕设计一:类爆炸

每种配料的咖啡都设计一个类,如一杯深焙咖啡,加摩卡和奶泡,DarkRoastWithMochaAndMilk
注:Beverage是饮料基类。

技术分享

3、缺陷设计二:有新的需求(如新的配料,配料价格调整等)会更改现有代码

把配料作为变量放超类中。

(1)类图

技术分享

(2)实现

技术分享
技术分享
技术分享

(3)缺点

当配料调价时,会修改已有代码;当有新配料时,会修改在Beverage中加上并且要修改cost()
当要加双倍牛奶怎么办?

二、装饰者模式

1、设计原则:开闭原则

类应该对扩展开放,对修改关闭。
目标:允许类容易扩展,在不修改现有代码的情况下,添加新的行为。
注:并不是每个地方都采用开闭原则,也没必要,可能会导致代码变得复杂且难以理解,要灵活运用。

2、初识装饰者模式-----不同口味的咖啡

有一杯咖啡,根据加入不同调料,计算价格,如一杯“加摩卡和奶泡的深焙咖啡”
(1)有一个深焙咖啡(DarkRoast)对象
(2)以摩卡(Mocha)对象装饰它
(3)以奶泡(Whip)对象装饰它
(4)调用cost()方法,并依赖委托将调料的价格加上去
技术分享

2、定义

动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

3、类图

技术分享

三、观察者模式解决星巴克

1、设计类图

技术分享

2、code实现

<1>抽象组件和抽象装饰者

技术分享

<2>具体组件(咖啡)

技术分享
技术分享

<3>具体装饰者(配料)

技术分享
技术分享

<4>测试

技术分享

《Head First-Chapter3》装饰者模式

标签:

原文地址:http://blog.csdn.net/wwyl1001/article/details/51272298

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!