(1.8)--第5.3章-装饰者模式软件设计与体系结构.ppt

上传人:刘静 文档编号:96654863 上传时间:2024-02-15 格式:PPT 页数:30 大小:4.02MB
返回 下载 相关 举报
(1.8)--第5.3章-装饰者模式软件设计与体系结构.ppt_第1页
第1页 / 共30页
(1.8)--第5.3章-装饰者模式软件设计与体系结构.ppt_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《(1.8)--第5.3章-装饰者模式软件设计与体系结构.ppt》由会员分享,可在线阅读,更多相关《(1.8)--第5.3章-装饰者模式软件设计与体系结构.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第5.3章 装饰者模式1星巴克咖啡订单管理系统管理、计算各种饮料的售价。Espresso浓缩咖啡浓缩咖啡HouseBlend家常咖啡家常咖啡DarkRoast深焙咖啡深焙咖啡Decaf脱咖啡因咖啡脱咖啡因咖啡Mocha摩卡摩卡Milk蒸奶蒸奶Ice冰冰第5.3章 装饰者模式2实现1第5.3章 装饰者模式3实现1类爆炸调料的增加/删除调料价格的修改第5.3章 装饰者模式4实现2使用实例变量和继承,跟踪这些调料第5.3章 装饰者模式5实现2第5.3章 装饰者模式6问题:实现cost方法第5.3章 装饰者模式7当哪些因素改变时会影响这个设计?调料价钱的改变会使我们更改现有代码。一旦出现新的调料,我们

2、就需要加上新的方法,并改变超类中的cost()方法。以后可能会开发出新饮料,对于这些饮料而言(冰茶),某些调料可能并不适合,但是在这个设计方式中,Tea子类仍将继承那些不合适的方法,比如:hasWhip()。如何顾客想要双倍摩卡,怎么办?第5.3章 装饰者模式8设计原则(Open-ClosedPrinciple)类应该对扩展开放,对修改关闭。我们的目标是允许类容易扩展,在不修改现有代码的情况下,就可搭配新的行为。如能实现这样的目标,其好处在于:这样的设计具有弹性,可以应对改变,可以接受新的功能来应对改变的需求。如何让设计的每个部分都遵循开放-关闭原则?这通常是无法做到的。要让OO设计同时具有开

3、放性和关闭性,又不修改现有的代码,需要花费许多时间和努力。一般来说,我们没有足够的精力把设计的每个部分都这么设计,这可能只是一种浪费。遵循开放-关闭原则,通常会引入新的抽象层次,增加代码的复杂度。你需要把注意力集中在设计中最有可能改变的地方,然后应用开放-关闭原则。第5.3章 装饰者模式9星巴克咖啡订单管理系统使用装饰者模式以饮料(Beverage)为主体,然后在运行时以调料(Condiment)来装饰(decorate)饮料比如,顾客想要摩卡和奶泡深焙咖啡,那么:取出一个深焙咖啡(DarkRoast)对象以摩卡(Mocha)对象装饰它以奶泡(Whip)对象装饰它调用cost方法,并依赖委托(

4、delegrate)将调料的价格加上去第5.3章 装饰者模式101.以DarkRoast对象开始2.顾客需要摩卡(Mocha),所以建立一个Mocha对象,并用它将DarkRoast对象包起来第5.3章 装饰者模式113.顾客也想要奶泡(Whip),所以建立一个Whip装饰者,并用它将Mocha对象包起来第5.3章 装饰者模式124.通过调用最外圈装饰者(Whip)的cost即可计算饮料价格。第5.3章 装饰者模式13第5.3章 装饰者模式14问题:如果有一张订单:如果有一张订单:“双倍摩卡双倍摩卡豆浆豆浆奶泡奶泡拿铁拿铁咖啡咖啡”,应该如何进行设计?,应该如何进行设计?第5.3章 装饰者模式

5、15Beverage类Condiment类第5.3章 装饰者模式16饮料(被装饰者)的代码第5.3章 装饰者模式17饮料(被装饰者)的代码第5.3章 装饰者模式18调料(装饰者)的代码第5.3章 装饰者模式19测试代码第5.3章 装饰者模式20测试结果第5.3章 装饰者模式21装饰者模式定义装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。特点装饰者和被装饰对象具有相同的超类型可以用一个或多个装饰者包装一个对象由于装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象(被包装)的场合,都可以用装饰过的对象代替她装饰者可以在所委托被装饰者的行为之前或之后,

6、加上自己的行为,以达到特定的目的对象可以在任何时候被装饰,所以可以在运行时动态的、不限量的用需要的装饰者来装饰对象第7章 设计模式227.3 装饰者模式第5.3章 装饰者模式23问题为什么Decorate类扩展自Component类?装饰者和被装饰者必须是一样的类型,我们在此使用继承达到“类型匹配”类型匹配意味着装饰者和被装饰者具有相同的接口,从而装饰者可以取代被装饰者新的行为并不是继承自超类,而是由组合对象得到,即所有饮料和调料可以更有弹性的加以混合和匹配我们可以在任何时候,实现新的装饰者增加新的行为。如果依赖继承,每当需要新行为时,必须修改代码Component类型可以使用抽象类,也可以使

7、用接口第5.3章 装饰者模式24装饰者模式实现实例武器升级系统第5.3章 装饰者模式25装饰者模式实现实例JavaI/OFileInputStream:基本文件读取BufferedInputStream:基本文件读取+利用缓存改进性能LineNumberInputStream:基本文件读取+利用缓存改进性能+计算行数第5.3章 装饰者模式26装饰者模式实现实例JavaI/O小写文本读取器第5.3章 装饰者模式27问题1星巴克决定在菜单上加上咖啡的容量大小,供顾客选择小杯(tall)、中杯(grande)、大杯(venti);另外还需要根据咖啡容量收费,比如小中大杯咖啡加上豆浆(Soy),分别加

8、收0.10、0.15、0.20美金。我们应该如何改变装饰者类应对这样的需求?第7章 设计模式287.3 装饰者模式第5.3章 装饰者模式29问题2在装饰者模式中,是否可以允许装饰者知道一连串装饰链条中其他装饰者地存在?比如,我们需要使用getDescription()列出“Whip,DoubleMocha”,而不是“Mocha,Whip,Mocha”。我们应该如何设计装饰者模式才能满足这种需求?第5.3章 装饰者模式30总结在我们的代码中,应该允许行为可以被扩展,而无需修改现有的代码装饰者模式意味着一群装饰者类,这些类用来包装具体组件装饰者反映出被装饰者的组件类型(具有相同的类型)装饰者可以在被装饰者的行为前面或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的目的可以用无数个装饰者包装一个组件装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型装饰者会导致设计中出现许多小对象,如果过度使用,会让程序变得复杂

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁