当前位置: 首页 > news >正文

建设网站哪好/关键词歌词打印

建设网站哪好,关键词歌词打印,海尔网站建设情况,开发一个购物app需要多少钱欢迎大家的不嫌弃,继续和我一起学习设计模式。上一篇已经把装饰者模式的类图有了一个整体的出来,末尾说的去想想实现的代码,你实践了吗?是什么原因让你实践了呢?又是什么原因让你没有动手呢?没动手&#xf…

欢迎大家的不嫌弃,继续和我一起学习设计模式。上一篇已经把装饰者模式的类图有了一个整体的出来,末尾说的去想想实现的代码,你实践了吗?是什么原因让你实践了呢?又是什么原因让你没有动手呢?没动手,可能是思路还不够明确是吗?

接下来,我们继续学习。通过代码实现的方式,来搞定装饰者模式。

写下代码

动手的时候来啦,我们先从Beverage类下手。这不需要修改原有的设计,如下所示:

/*** * @Description: Beverage是一个抽象类,有两个方法:getDescription()以及cost()* @author:XuYue*/
public abstract class Beverage {String description = "Unknown Beverage";// getDescription()已经在此实现了,但是cost()必须在子类中实现public String getDescription() {return description;}public abstract double cost();
}
复制代码

然后我们继续实现Condiment(调料)抽象类,也就是装饰者类:

/*** * @Description: 必须让CondimentDecorator能够取代Beverage,所以将CondimentDecorator扩展自Beverage类*/
public abstract class CondimentDecorator extends Beverage {// 所有的调料装饰者都必须重新实现getDescription()方法,稍后说明原因public abstract String getDescription();
}
复制代码

写饮料的代码

有了上面的基础,即已经有了基类,那我们就可以愉快的把饮料类实现了。先从浓缩咖啡(Espresso)开始吧。在这,我们需要实现cost()方法以及将描述设置清楚。其他类,在代码里表现,就不在文中体现啦。

/*** * @Description:首先,让Espresso扩展自Beverage类,因为Espresso是一种饮料* @author:XuYue*/
public class Espresso extends Beverage {public Espresso() {// 为了要设置饮料的描述,我们写了一个构造器,description继承自Beveragedescription = "Espresso";}// 需要计算Espresso的价钱@Overridepublic double cost() {return 1.99;}}
复制代码

写调料代码

还记得上篇中的类图吗,根据类图我们已经完成了抽象组件(Beverage),有了具体组件(HoustBlend),也有了抽象装饰者(CondimentDecorator)。那么,就差实现具体的装饰者了,也就是我们的调料。这里是列举Mocha,其他的自行实现哦。小编提供的代码里已经实现啦, 感兴趣的小伙伴,可以写完和小编的PK下。

/*** * @Description:* 摩卡是一个装饰者,所以让它扩展自CondimentDecorator* CondimentDecorator扩展自Beverage* @author:XuYue*/
public class Mocha extends CondimentDecorator {Beverage beverage;public Mocha(Beverage beverage) {this.beverage = beverage;}@Overridepublic String getDescription() {return beverage.getDescription() + " , Mocha";}@Overridepublic double cost() {return 0.20 + beverage.cost();}}
复制代码

供应咖啡

恭喜你,经历过之前的准备,是时候坐下来休息休息,点一杯咖啡享受下人生啦。来看看你的装饰者模式设计出来的系统吧。

写之前,我们先看看双倍摩卡咖啡的是怎么装饰的吧。其实就是上一篇中的单倍摩卡,再加一层摩卡的装饰类即可,是不是很神奇呢。

public class StarbuzzCoffee {public static void main(String[] args) {// 订一杯Espresso,不需要调料Beverage beverage = new Espresso();System.out.println(beverage.getDescription() + " $" + beverage.cost());// 订一杯双倍Mocha加Whip的DarkRoast()咖啡Beverage beverage2 = new DarkRoast();// 用Mocha装饰它beverage2 = new Mocha(beverage2);// 用第二个Mocha装饰它beverage2 = new Mocha(beverage2);// 用Whip装饰它beverage2 = new Whip(beverage2);System.out.println(beverage2.getDescription() + " $" + beverage2.cost());// 订一杯调料为Soy、Mocha、Whip的HouseBlend咖啡Beverage beverage3 = new HouseBlend();beverage3 = new Soy(beverage3);beverage3 = new Mocha(beverage3);beverage3 = new Whip(beverage3);System.out.println(beverage3.getDescription() + " $" + beverage3.cost());}
}// 输出结果
Espresso $1.99
Dark Roast Coffee , Mocha , Mocha , Whip $1.49
House Blend Coffee , Soy , Mocha , Whip $1.34
复制代码

目前为止,我们已经把上篇遗留下来的类图转换成了代码实现出来。当我们在后面介绍到工厂和生成器模式的时候,将会有更好的方式建立被装饰者对象。所以,尽管现在的装饰者模式存在部分缺陷,但不妨碍我们对这个模式的学习,后续的增加,只是对模式有更加深刻的认知。

所以,这次的内容就先到这里。下一篇,我们针对性的对现有JDK中的装饰者模式举个例子,并对装饰者模式做出总结。

留个小习题,在这次讲的过程中我们是加了调料, 那咖啡厅里现在都会有杯子的大小,小杯、中杯、大杯,并收取相应的价钱,该如何编写呢?先抛个砖,我们在Beverage类中加上getSize()和setSize()。下次小编会给出答案噢。

PS:代码已经上传,需要查看的朋友点击此处HeadFirstDesign

推荐阅读

设计模式之装饰者模式(一)

爱生活,爱学习,爱感悟,爱挨踢

转载于:https://juejin.im/post/5caab3fae51d452b581e6a99

http://www.lbrq.cn/news/1333045.html

相关文章:

  • 怎样制作一个个人网站/直接打开百度
  • 国外优秀的平面设计网站/如何推广微信公众号
  • 连云港市海州区建设局网站/网络推广的工作内容是什么
  • 广西来宾博彩网站建设/在线搭建网站
  • wordpress有点尴尬诶该页无法显示/搜索引擎优化的主题
  • 内蒙古做网站的公司/微信朋友圈广告投放价格表
  • 重庆网站制作的网站/如何优化网络
  • 做美食的网站可以放些小图片/百度收录查询方法
  • 网站审核照片幕布/seo文章关键词怎么优化
  • 东莞短视频seo制作/seo合作代理
  • 湖南建设资质申请网站/深圳外贸seo
  • app制作平台大全/湖南优化公司
  • 电脑网站首页设计/站长统计是什么意思
  • 做网站的主题/西安seo引擎搜索优化
  • 深圳市年检在哪个网站做/seo综合查询站长工具关键词
  • 郑州做网站设计的公司/渠道营销推广方案
  • 2017做网站挣钱吗/外链生成网站
  • app备案查询网站/315影视行业
  • 做网站费用会计分录/广告传媒公司经营范围
  • 公司网站建设深/微信软文案例
  • 用web做简单的电商网站/web网站模板
  • iis如何建立网站/湖南企业竞价优化公司
  • 自助交友网站建设/semantic scholar
  • 彩票类网站怎么做推广/网站关键词查询网址
  • 企业建设网站意义/百度推广最简单方法
  • 中国铁建华南建设有限公司网站/网络项目推广平台
  • 做网站纸箱关键词/营销推广费用方案
  • 企业被网站收录/交换友情链接的途径有哪些
  • 鞍山外国网站制作/保定seo推广外包
  • 企业电话号码查询网站/南昌seo管理
  • ZKmall开源商城的容灾之道:多地域部署与故障切换如何守护电商系统
  • Langchain入门:文本摘要
  • golang的继承
  • 编程模型设计空间的决策思路
  • Baumer高防护相机如何通过YoloV8深度学习模型实现纸箱的实时检测计数(C#代码UI界面版)
  • 「数据获取」中国高技术产业统计年鉴(1995-2024年)(获取方式看绑定的资源)