电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

Kotlin设计模式实现之装饰者模式

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

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

Kotlin设计模式实现之装饰者模式

    Kotlin设计模式实现之装饰者模式    前言       今天是2020年的第一天,在这里祝大家元旦快乐!之前用kotlin实现了策略模式,文中写到要多写几篇文章来加深以下对设计模式的理解。那么今天要写的看题目应该就知道了:装饰者模式(也叫装饰模式)。下面是装饰者模式的定义:装饰者模式(Decorator):在不改变对象自身的基础上,动态地给一个对象添加一些额外的职责。与继承相比,装饰者是一种更轻便灵活的做法。若要扩展功能,装饰者提供了比继承更有弹性的替代方法。故事场景小星刚毕业,到一家公司实习。今天来到公司后,一如既往地开始编写它的增删改查。刚刚坐下打开电脑,技术锦鲤走了过来,小星内心开始发牢骚(锦鲤来干啥,每回它来都没好事)。锦鲤告诉小星,公司想要编写一个卖咖啡的系统,有不同种类的咖啡,需要能计算出咖啡的钱和区分咖啡的类别。小星:没问题,很简单。十分钟后,小星写出了它的第一版代码:咖啡的基类:abstract class Beverage(var description: String = "Unknown Beverage") /描述 open fun getDescriptions():String return description /价钱 abstract fun cost():Double其他咖啡(子类):/* * 深度烘焙咖啡(星巴克) * * author jiang zhu on 2020/1/1 */class DarkRoast:Beverage() init description = "DarkRoast" override fun cost(): Double return 2.99 /* * 意式浓缩咖啡(星巴克) * * author jiang zhu on 2019/12/16 */class Espresso:Beverage() init description = "Espresso" override fun cost(): Double return 1.99 技术锦鲤:你这个卖咖啡看着有问题啊。小星:没问题啊,您看啊,咱们有一个Beverage的抽象类,里面有getDescription()记录咖啡的描述,还有一个cost()的抽象方法来让子类计算价格。逻辑没问题啊,如果你想增加一种咖啡的话,直接增加子类不就好了吗?技术锦鲤:但是之前没有考虑到一个问题,咖啡可以加入各种调料,比如:蒸奶、豆浆、摩卡,但这些公司的系统就无能为力了。小星:也可以啊,比如你有DarkRoast加牛奶,你只需建一个MilkDarkRoast类继承Beverage就可以了,还比如你有DarkRoast加摩卡,你只需再建一个MochaDarkRoast类继承Beverage就可以了啊。技术锦鲤:对,是可以这样来实现,但是你想过吗?如果咖啡种类少了还行,要是有很多呢?你好好想想。小星在脑海中想出了下面这幅图:小星:对哦,这样的话类就太多了,而且很多重复的东西,那应该怎么解决呢?技术锦鲤:你可以换个思路,既然继承无法解决这个问题,那么可以采用不一样的做法:我们可以将Beverage作为主体,然后在运行时以调料(蒸奶、豆浆、摩卡等)来装饰Beverage,就像你刚才举的例子:我们只需拿一个DarkRoast对象,然后来选择用牛奶或摩卡来装饰(Decorate)就可以了。小星:我听得有点懵,您能具体说说吗?技术锦鲤:你可以创建一个CondimentDecrator的抽象类来继承Beverage,然后你其他所有的调料就都可以抽出来继承CondimentDecrator,这样你只需要选择好咖啡,然后再选择你需要的调料就行了,而且还可以添加多种调料。下面是技术锦鲤给的图:小星:我好像有点明白了。技术锦鲤:那你看看修改以下你的代码吧。小星听从锦鲤的指导,刚才建的咖啡类没做改动,新增加了一个CondimentDecrator类:abstract class CondimentDecorator:Beverage() abstract override fun getDescriptions():String将摩卡、蒸奶等调料建立类继承自CondimentDecrator:(注意在cost方法中要加上咖啡的价格,描述时也要加上咖啡的名称)/摩卡class Mocha(var beverage: Beverage):CondimentDecorator() override fun getDescriptions(): String return "$beverage.getDescriptions(),Mocha" override fun cost(): Double return 0.20+beverage.cost() /奶油class Whip(var beverage: Beverage):CondimentDecorator() override fun getDescriptions(): String return "$beverage.getDescriptions(),Whip" override fun cost(): Double return 0.10+beverage.cost() 小星:终于写完了,但是还不知道能不能成功。技术锦鲤:你可以测试一下啊,来,我看着你测试。小星在锦鲤的注视下写出了以下测试方法:class Test companion object /* 我是main入口函数 */ JvmStatic fun main(args: Array<String>) var beverage2 : Beverage = DarkRoast() beverage2 = Mocha(beverage2) beverage2 = Mocha(beverage2) beverage2 = Whip(beverage2) println(beverage2.getDescriptions()+beverage2.cost() 技术锦鲤:点击运行吧,看看是不是DarkRoast中加了两份摩卡和一份奶油,还有就是价钱看看算的对不对哦。小星忐忑地点了运行按钮:技术锦鲤:不错不错,小星写出来了,你已经掌握了装饰者模式,“在不改变对象自身的基础上,动态地给一个对象添加一些额外的职责。”你已经做到了。但是有点小问题,你的价格出来的结果可不太对,虽然可以忽略不记,但是写程序一定要严谨。给你点提示吧,你可以去查一下BigDecimal这个类,你就知道你的计算精度问题了。小星:好嘞,谢谢锦鲤。小星很开心,学习了一种设计模式,感觉很巧妙,好像还有二十二种,啊。慢慢来吧。欢迎大家关注我的个人公众号,会定期发布安卓、Java学习及搞笑文章。  -全文完-

注意事项

本文(Kotlin设计模式实现之装饰者模式)为本站会员(ji****81)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

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




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.