版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址: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());}
}

有趣的设计模式——从一杯奶茶品味装饰模式相关推荐

  1. 一杯奶茶的数字化之路

    本文由作者 阿翘AKIU 于社区发布 最近这段时间,我越来越多地看到数字化转型这个词. 自从十九大报告首次出现了数字经济这一概念以后,网上出现了很多讲产业互联网,讲供给侧改革,讲数字化转型的文章. 而 ...

  2. 类似来杯奶茶app软件

    类似来杯奶茶app软件  来杯奶茶app安卓是一款非常有趣的全新网上订餐服务平台,为用户提供宁关于奶茶的订购服务,这里有非常强大的定位功能,为你一键定位自己家门口附近的各种奶茶店,智能化的配送服务,帮 ...

  3. 请UI小姐姐喝了一杯奶茶要来的网站

    作者:有趣的老凌 https://juejin.cn/post/7010397195157372942 本期博客小凌就和大家分享一波硬核网站.作为一名优秀的前端工程师不能总依靠UI小姐姐,工作上多为U ...

  4. 跟幼师谈恋爱什么梗_和懂你的人谈恋爱,比“秋天的第一杯奶茶”要甜

    这两天"秋天的第一杯奶茶"梗,莫名奇妙就火了,冲上了微博热搜,朋友圈也被疯狂刷屏. 很多人是不是和我一样,第一眼看见脑袋里浮现的全是问号? 所以#秋天的第一杯奶茶#究竟是什么梗? ...

  5. 错过了秋天的第一杯奶茶,不要错过秋天第一场黑客松

    不知不觉,2020 年只剩下 3 个月了.回望这一年,好像发生了很多事情,但又好像很多事情都还没做. 受到疫情影响,全世界仿佛被按下了「暂停键」,无论是我们所依赖的生活网络.还是习以为常的生活模式都被 ...

  6. 秋天的第一杯奶茶该买哪家?我用爬虫爬取所有数据教你买哪家

    现在越来越多年轻人手里的那一杯快乐肥宅水,从可乐换成了奶茶.上世纪80年的奶茶并不像现在的奶茶口味繁多,配料多样,而大部分80.90后童年的奶茶只有一个名字,那就是"台湾珍珠奶茶" ...

  7. 给你入冬后的第一杯奶茶

    内容摘要: 在信息技术高速发展的今天,信息的传播速度超乎了人们的想象,手指轻轻一点,我们就进入了一个全新的信息世界,信息的即时共享,信息的广泛传播,信息跨越了国界,跨越了地域,跨越了种族,跨越了一道又 ...

  8. 微信的用户已退出是什么意思_秋天的第一杯奶茶是什么梗 微信朋友圈52元奶茶红包是什么意思...

    秋天的第一杯奶茶是什么梗 在微凉的秋天喝一杯温热的奶茶是不是很惬意?现在很多朋友都不知道秋天的第一杯奶茶是什么梗什么意思?下面来介绍下秋天的第一杯奶茶的含义.来源和意义让我们看看. 一般来说情侣之间发 ...

  9. “秋天的第一杯奶茶”突然刷屏!这是什么新梗?

    #秋天的第一杯奶茶# 突然上了微博热搜! 从第七 升到了第四 朋友圈.微博上也是不少人在晒-- 是不是很多小伙伴和我一样 第一眼看见??? 到底是什么梗? 有人说:"今年的秋天比以往来的早一 ...

最新文章

  1. 【uva10829-求形如UVU的串的个数】后缀数组+rmq or 直接for水过
  2. [Vue warn]: Failed to mount component: template or render function not defined. 错误解决方法
  3. golang OOP面向对象
  4. DC使用教程系列2-时钟的概念与环境接口面积约束脚本
  5. 用友互联网战略的变与不变
  6. logstash filter grok 用法
  7. Codeforces Round #627 (Div. 3) E. Sleeping Schedule dp
  8. mybatis批量更新及其效率问题
  9. java编程菜鸟入门02
  10. 最新的 iOS 申请证书与发布流程
  11. [KALI] 开启ssh远程连接
  12. JDK7升级到JDK8
  13. Java使用EasyExcel下载xls、xlsx 出现文件格式与扩展名不匹配
  14. PHPStudy设置局域网访问
  15. Python 爬虫--下载音乐
  16. Vue3状态管理-小菠萝Pinia快速入门学习
  17. threejs 特效 自定义发光围栏,发光墙体,闪烁动画
  18. Java开发人员必须掌握的Linux命令(二)
  19. 怎么让上下两排对齐_《excel表中怎么使同一格内的上下两行对齐》 excel两表格数据对齐...
  20. 解决element-ui对话框组件el-dialog遮罩层小问题

热门文章

  1. PWM呼吸灯之三角波、锯齿波、正弦函数波
  2. 一个经常玩电脑的人应该知道的:电脑快捷键
  3. java对word文档的操作
  4. 【CZY选讲·Triangle】
  5. vue的五个小实例解析其基础功能
  6. 删除Oracle表空间,释放硬盘空间
  7. Linux 777 权限表示什么,各数字又是什么含义?
  8. 世界电信日| 谈谈电信行业缘何牵线云计算?
  9. 解决matplotlib不显示图片
  10. 微信小程序传数组给后台(thinkphp后台接受前端数组参数)