欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第8章装饰者模式.ppt

    • 资源ID:70798509       资源大小:5.07MB        全文页数:29页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第8章装饰者模式.ppt

    第八章第八章 装饰者模式装饰者模式欢迎饮用星巴兹欢迎饮用星巴兹(Starbuzz)咖啡咖啡最初设计的订购系统(下页):1焦炒咖啡 家庭混合咖啡无咖啡因咖啡蒸馏咖啡2 购买咖啡时,每一种咖啡中能添加一种或几种调料:steamed milk(蒸煮的牛奶),soy(酱油),mocha(摩卡,也称为巧克力),和 whipped milk(加了甜点心的牛奶)。每一种调料都要收一点钱,星巴兹(Starbuzz)咖啡订购系统变成下面的样子(下页):3每个cost()方法计算咖啡及各种调料的价钱。类爆炸!类爆炸!从基类派生添加了各种调料的咖啡子类。45修改后的订购系统修改后的订购系统6修改后的订购系统怎么样?修改后的订购系统怎么样?7这个设计的缺陷这个设计的缺陷 如果调料的价格改变,我们需要修改现存的代码。如果增加了新的调料,我们需要在基类增加新的方 法以及修改cost()方法。我们也可能有新的饮料类型。一些饮料类型,例如,冰茶(ice tea),现有的调料可能是不合适的。但是,茶子类仍然后继承基类的调料方法。如果客户需要双份mocha,怎么办呢?8开闭原则开闭原则 我们的目的是允许类易于扩展,组合新的行为,但不修改现有的代码。9会会装饰者模式会会装饰者模式 我们已经看到:附加调料的饮料定价模式,用继承表示是不合适的;在基类增加调料的实例变量和方法,对一些子类也是不合适的。这里,我们试试:以饮料为主体,用调料“装饰”饮料。例如,如果客户需要Dark Roast(焦炒咖啡),添加Mocha(摩卡)和Whip(甜点心)。10会会装饰者模式会会装饰者模式(续续)我们可以:取DarkRoast(焦炒咖啡)对象;用Mocha(摩卡)对象装饰它;用Whip(甜点心)对象装饰它;调用cost()方法计算价格,总价格的计算需要委托。委托。但是,我们怎样装饰一个对象?又怎样委托?11用装饰者构造饮料订购系统用装饰者构造饮料订购系统 从DarkRoast(焦炒咖啡)对象开始12客户需要Mocha(摩卡),所以,我们创建一个Mocha对象,并用它包装DarkRoast(焦炒咖啡)。装饰者对象是“包装者”。13 客户也需要Whip(甜点心),所以,我们也创建一个 Whip装饰者,并用它包装Mocha(摩卡)。14 现在为客户计算价格。我们调用最外层装饰者(Whip 甜点心)的cost()。Whip委托它所装饰的对象计算价格。它获得了价格后,再累加Whip的价格。15目前做的目前做的 装饰者和被装饰对象有相同的超类型;可以用一个或多个装饰者包装一个对象;任何时候需要原始对象(即被包装的对象),都可以用装 饰过的对象代替它。因为装饰者和被装饰者有相同的 超类型;装饰者可以在所委托的被装饰者的行为之前与装饰者可以在所委托的被装饰者的行为之前与/或之后,或之后,加上自己的行为,以达到特定的目的。加上自己的行为,以达到特定的目的。对象可以在任何时候被装饰,所以可以在运行时动态 地、不限量地使用装饰者来装饰对象。16装饰者模式定义装饰者模式定义17装饰者模式类图装饰者模式类图18装饰我们装饰我们的饮料的饮料19写星巴兹写星巴兹(Strbuzz)代码代码我们从Beverage类开始,它与原设计是一样的:public abstract class Beverage String description=Unknown Beverage;public String getDescription()return description;public abstract double cost();20实现调料实现调料(装饰者装饰者)抽象类抽象类 public abstract class CondimentDecorator extends Beverage public abstract String getDescription();21对饮料编码对饮料编码public class Espresso extends Beverage /蒸馏咖啡public Espresso()description=Espresso;public double cost()return 1.99;22对饮料编码对饮料编码(续续)public class HouseBlend extends Beverage /家庭混合咖啡public HouseBlend()description=House Blend Coffee;public double cost()return.89;23实现调料实现调料(装饰者装饰者)具体类具体类 public class Mocha extends CondimentDecorator /摩卡Beverage beverage;public Mocha(Beverage beverage)this.beverage=beverage;public String getDescription()return beverage.getDescription()+,Mocha;public double cost()return.20+beverage.cost();描述不只是饮料,还要包括添加的调料。24订购星巴兹订购星巴兹(Starbuzz)咖啡的测试代码咖啡的测试代码 public class StarbuzzCoffee public static void main(String args)Beverage beverage=new Espresso();/蒸馏咖啡 System.out.println(beverage.getDescription()+$+Beverage.cost();Beverage beverage2=new DarkRoast();/焦炒咖啡 beverage2=new Mocha(beverage2);/添加摩卡 beverage2=new Mocha(beverage2);/添加摩卡 beverage2=new Whip(beverage2);/添加甜点心 System.out.println(beverage2.getDescription()+$+beverage2.cost();Beverage beverage3=new HouseBlend();/家庭混合咖啡 beverage3=new Soy(beverage3);/添加酱油 beverage3=new Mocha(beverage3);/添加摩卡 beverage3=new Whip(beverage3);/添加甜点心 System.out.println(beverage3.getDescription()+$+beverage3.cost();25订购结果订购结果26真实世界的装饰者:真实世界的装饰者:Java I/O java.io包内的类太多了!其实,许多类都是装饰者。下面是一个典型的对象集合(下页):27真实世界的真实世界的装饰者:装饰者:Java I/O(续续)28Java I/O装饰类装饰类29

    注意事项

    本文(第8章装饰者模式.ppt)为本站会员(hyn****60)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开