有趣的设计模式——从一杯奶茶品味装饰模式
版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
概述
装饰模式定义:动态地给一个对象添加额外的职责和功能。也就是说:我们可以在不使用继承、不改变原有结构的基础上扩展新的内容。举个例子,我们都担心摔碎手机屏幕,所以我们可以在手机的外表面裹一层材料(比如钢化膜,手机套)从而使得手机具有了抗摔的新功能;并且手机原本的功能(打电话,拍照,上网)并没有受到任何影响。嗯哼,看完这个小例子,我们来瞅瞅装饰模式中的四个角色:
- Component:被装饰的原始抽象(类或接口)组件
- ConcreteComponent:Component的具体实现类
- Decorator:抽象装饰者
- ConcreteDecorator:Decorator的具体实现类
示例
在此,以生活中熟悉的奶茶的例子阐述装饰模式。
抽象奶茶类
package com.decoratorPattern02;
/*** 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl*/
public abstract class AbstractMilkTea {public abstract String descript();public abstract double getPrice();
}
抽象奶茶类的子类
package com.decoratorPattern02;
/*** 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl*/
public class MilkTea extends AbstractMilkTea {@Overridepublic String descript() {String string = "美味的奶茶。";return string;}@Overridepublic double getPrice() {double price = 6;return price;}}
要点概述:
- 1、该子类继承自AbstractMilkTea
- 2、该子类不是抽象的
- 3、在子类中重写父类的方法
抽象装饰者
package com.decoratorPattern02;
/*** 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl*/
public abstract class AbstractDecorator extends AbstractMilkTea {//AbstractMilkTea类型的成员变量private AbstractMilkTea abstractMilkTea;public AbstractDecorator() {}public AbstractDecorator(AbstractMilkTea abstractMilkTea) {this.abstractMilkTea = abstractMilkTea;}@Overridepublic String descript() {return abstractMilkTea.descript();}@Overridepublic double getPrice() {return abstractMilkTea.getPrice();}
}
要点概述:
- 1、该为实抽象类
- 2、该抽象类继承自AbstractMilkTea
- 3、该类有参构造函数参数为AbstractMilkTea类型
- 4、在该类中以成员变量的形式持有了AbstractMilkTea
- 5、在该类中重写父类AbstractMilkTea的方法
抽象装饰者的子类
package com.decoratorPattern02;
/*** 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl*/
public class SugarDecorator extends AbstractDecorator {public SugarDecorator() {}public SugarDecorator(AbstractMilkTea abstractMilkTea) {super(abstractMilkTea);}@Overridepublic String descript() {return super.descript()+"加糖";}@Overridepublic double getPrice() {return super.getPrice()+1;}
}
要点概述:
- 1、该类继承自AbstractDecorator
- 2、该类有参构造函数参数为AbstractMilkTea类型
- 3、在该类中重写父类AbstractDecorator的方法
抽象装饰者的子类
package com.decoratorPattern02;
/*** 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl*/
public class RedBeanDecorator extends AbstractDecorator {public RedBeanDecorator() {}public RedBeanDecorator(AbstractMilkTea abstractMilkTea) {super(abstractMilkTea);}@Overridepublic String descript() {return super.descript() + "加红豆";}@Overridepublic double getPrice() {return super.getPrice() + 2;}
}
要点概述:
- 1、该类继承自AbstractDecorator
- 2、该类有参构造函数参数为AbstractMilkTea类型
- 3、在该类中重写父类AbstractDecorator的方法
测试
package com.decoratorPattern02;
/*** 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl*/
public class Test {public static void main(String[] args) {MilkTea milkTea = new MilkTea();System.out.println(milkTea.descript());System.out.println(milkTea.getPrice());SugarDecorator sugarDecorator = new SugarDecorator(milkTea);System.out.println(sugarDecorator.descript());System.out.println(sugarDecorator.getPrice());RedBeanDecorator redBeanDecorator = new RedBeanDecorator(milkTea);System.out.println(redBeanDecorator.descript());System.out.println(redBeanDecorator.getPrice());}
}
有趣的设计模式——从一杯奶茶品味装饰模式相关推荐
- 一杯奶茶的数字化之路
本文由作者 阿翘AKIU 于社区发布 最近这段时间,我越来越多地看到数字化转型这个词. 自从十九大报告首次出现了数字经济这一概念以后,网上出现了很多讲产业互联网,讲供给侧改革,讲数字化转型的文章. 而 ...
- 类似来杯奶茶app软件
类似来杯奶茶app软件 来杯奶茶app安卓是一款非常有趣的全新网上订餐服务平台,为用户提供宁关于奶茶的订购服务,这里有非常强大的定位功能,为你一键定位自己家门口附近的各种奶茶店,智能化的配送服务,帮 ...
- 请UI小姐姐喝了一杯奶茶要来的网站
作者:有趣的老凌 https://juejin.cn/post/7010397195157372942 本期博客小凌就和大家分享一波硬核网站.作为一名优秀的前端工程师不能总依靠UI小姐姐,工作上多为U ...
- 跟幼师谈恋爱什么梗_和懂你的人谈恋爱,比“秋天的第一杯奶茶”要甜
这两天"秋天的第一杯奶茶"梗,莫名奇妙就火了,冲上了微博热搜,朋友圈也被疯狂刷屏. 很多人是不是和我一样,第一眼看见脑袋里浮现的全是问号? 所以#秋天的第一杯奶茶#究竟是什么梗? ...
- 错过了秋天的第一杯奶茶,不要错过秋天第一场黑客松
不知不觉,2020 年只剩下 3 个月了.回望这一年,好像发生了很多事情,但又好像很多事情都还没做. 受到疫情影响,全世界仿佛被按下了「暂停键」,无论是我们所依赖的生活网络.还是习以为常的生活模式都被 ...
- 秋天的第一杯奶茶该买哪家?我用爬虫爬取所有数据教你买哪家
现在越来越多年轻人手里的那一杯快乐肥宅水,从可乐换成了奶茶.上世纪80年的奶茶并不像现在的奶茶口味繁多,配料多样,而大部分80.90后童年的奶茶只有一个名字,那就是"台湾珍珠奶茶" ...
- 给你入冬后的第一杯奶茶
内容摘要: 在信息技术高速发展的今天,信息的传播速度超乎了人们的想象,手指轻轻一点,我们就进入了一个全新的信息世界,信息的即时共享,信息的广泛传播,信息跨越了国界,跨越了地域,跨越了种族,跨越了一道又 ...
- 微信的用户已退出是什么意思_秋天的第一杯奶茶是什么梗 微信朋友圈52元奶茶红包是什么意思...
秋天的第一杯奶茶是什么梗 在微凉的秋天喝一杯温热的奶茶是不是很惬意?现在很多朋友都不知道秋天的第一杯奶茶是什么梗什么意思?下面来介绍下秋天的第一杯奶茶的含义.来源和意义让我们看看. 一般来说情侣之间发 ...
- “秋天的第一杯奶茶”突然刷屏!这是什么新梗?
#秋天的第一杯奶茶# 突然上了微博热搜! 从第七 升到了第四 朋友圈.微博上也是不少人在晒-- 是不是很多小伙伴和我一样 第一眼看见??? 到底是什么梗? 有人说:"今年的秋天比以往来的早一 ...
最新文章
- 【uva10829-求形如UVU的串的个数】后缀数组+rmq or 直接for水过
- [Vue warn]: Failed to mount component: template or render function not defined. 错误解决方法
- golang OOP面向对象
- DC使用教程系列2-时钟的概念与环境接口面积约束脚本
- 用友互联网战略的变与不变
- logstash filter grok 用法
- Codeforces Round #627 (Div. 3) E. Sleeping Schedule dp
- mybatis批量更新及其效率问题
- java编程菜鸟入门02
- 最新的 iOS 申请证书与发布流程
- [KALI] 开启ssh远程连接
- JDK7升级到JDK8
- Java使用EasyExcel下载xls、xlsx 出现文件格式与扩展名不匹配
- PHPStudy设置局域网访问
- Python 爬虫--下载音乐
- Vue3状态管理-小菠萝Pinia快速入门学习
- threejs 特效 自定义发光围栏,发光墙体,闪烁动画
- Java开发人员必须掌握的Linux命令(二)
- 怎么让上下两排对齐_《excel表中怎么使同一格内的上下两行对齐》 excel两表格数据对齐...
- 解决element-ui对话框组件el-dialog遮罩层小问题