- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
初窥装饰者模式
场景
考虑这样一种情景:现在,有家咖啡店,他们需要一个设计合理的订单系统。关键需求如下:
1.咖啡的种类较多,有爱尔兰(IrishCoffee),星巴克(StarbucksCoffee),
雀巢(Nestle)等;
2.咖啡中可以添加的配料有糖(Sugar),牛奶(Milk),豆浆(Soy);
3.咖啡的价格还需要包括配料,如果客户点了的话。
解决方案
方案一:(下列图引用HeadFirst)
1/6
说明:Beverage为基类,有一个description成员变量来描述饮料,有一个抽象的cost()
方法计算价格。子类较多,例如:爱尔兰牛奶咖啡(IrishCoffeeAndMilk),爱尔兰双倍牛奶
咖啡(IrishCoffeeAndDoubleMilk),andsoon。这样的设计简直是类爆炸,在开发的需求阶
段,我们不可能确定所有该咖啡店会卖出的咖啡,开发过程中或者开发结束后,他们又创造了
新的咖啡种类或者配料种类——这样简直就是开发者的噩梦!
方案二:(下列图引用自HeadFirst)
方案一明显是垃圾实现,我们是否可以以“饮料〞为主体,用配料来“装饰〞之?
就像下面:
现在顾客点了一杯爱尔兰双倍牛奶咖啡,我们要做的是:
1.创立一个爱尔兰咖啡对象
2.以牛奶装饰它
3.再次用牛奶装饰它
4.调用cost方法,并依赖委托将配料的价格算进去
2/6
例子如下:
定义装饰模式
现在我们可以来定义装饰模式了:
动态的将行为附加到对象上,若要扩展功能,装饰者提供了优于继承的解决方案。
类图如下:
3/6
代码
1.抽象组建类:
publicabstractclassBeverage{
Stringdescription;
publicStringgetDescription(){
returndescription;
}
publicabstractdoublecost();
}
2.装饰者类(也可以是抽象的,必须继承Beverage,为什么?oh,myGod!)
publicabstractclassCondimentDecoratorextendsBeverage{
publicabstractStringgetDescription();
}
3.爱尔兰咖啡
publicclassIrishCoffeeextendsBeverage{
4/6
publicIrishCoffee(){
description=爱尔兰咖啡;
}
@Override
publicdoublecost(){
return1.98;
}
}
其他咖啡类似,不再给出
4.配料(也就是真正的装饰者),以眼泪为例。
publicclassTearextendsCondimentDecorator{
Beveragebeverage;
publicTear(Beveragebeverage){
this.beverage=beverage;
}
@Override
publicStringgetDescription(){
returnbeverage.getDescription()++眼泪;
}
@Override
您可能关注的文档
- 浙教版七年级科学下册思维导图(全册) .pdf
- 浙教2011版科学七年级下册《第3章 运动和力 第1节 机械运动》完整版.pdf
- 济南市历城区2022-2023学年四年级数学第一学期期末联考试题(含解析).pdf
- 测量试题参考资料.pdf
- 浅谈非公有制企业团建工作中存在的问题和对策 .pdf
- 浅谈迈克尔·杰克逊的音乐成长之路 .pdf
- 浅谈室内燃气管道设计 .pdf
- 浅谈初中生物与高中生物教学的衔接 .pdf
- 浅谈互联网+背景智能网联汽车发展趋势 .pdf
- 浅议小学心理健康教育中的家校合作 .pdf
- 电工(高级)资格证考试考前冲刺模拟题库(b卷)附答案详解.docx
- 中小学生校园欺凌旁观者干预意愿研究——基于旁观者效应理论与某市中学生问卷.docx
- 电工(高级)资格证考试考前冲刺模拟题库附答案详解(能力提升).docx
- 电工(高级)资格证考试考前冲刺模拟题库(培优)附答案详解.docx
- 电工(高级)资格证考试考前冲刺模拟题库附答案详解(综合卷).docx
- 旅途见闻与个人成长感悟.docx
- 电工(高级)资格证考试考前冲刺模拟题库附答案详解(突破训练).docx
- 电工(高级)资格证考试考前冲刺模拟题库(名师推荐)附答案详解.docx
- 公司氨合成工合规化操作规程.docx
- 电工(高级)资格证考试考前冲刺模拟题库附答案详解(精练).docx
最近下载
- 内地新疆高中班学生转学、休学审核表.pdf VIP
- GBT 18015.1-2017 数字通信用对绞或星绞多芯对称电缆 第1部分:总规范.pdf
- TJAASS 151-2024 水稻碳足迹评价方法.pdf VIP
- 新解读《GB_T 18015.1-2017数字通信用对绞或星绞多芯对称电缆 第1部分:总规范》最新解读.docx VIP
- 2022年苏州大学计算机科学与技术专业《计算机网络》科目期末试卷B(有答案).docx VIP
- 检验科仪器设备故障应急预案.docx VIP
- (27页PPT)K12教师试岗培训工作安排及其说明.pptx VIP
- 保姆带小孩合同协议书例文.pdf VIP
- 危重病人抢救应急演练方案.pdf
- XP-1A SF6定性检漏仪说明书.pdf VIP
原创力文档


文档评论(0)