尚硅谷设计模式笔记-装饰者模式
文章目录
- 一、需求
- 二、装饰者方法
- 三、装饰者模式的JDK应用
笔记来源: 尚硅谷
一、需求
星巴克咖啡订单项目(咖啡馆) :
- 咖啡种类/单品咖啡: Espresso(意大利浓咖啡)、 ShortBlack、 LongBlack(美式
咖啡)、Decaf(无因咖啡)- 调料: Milk、 Soy(豆浆)、 Chocolate
- 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便
- 使用面向对象的方法来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖
啡+调料组合。
二、装饰者方法
说明
- Drink类就是抽象类
- LongBlack是单品咖啡
- Decorator是一一个装饰类,含有一个被装饰的对象(Drink obj)
- Decorator的cost方法进行一个费用的叠加计算,递归的计算价格
Drink类:
public abstract class Drink {private String des;//描述private float price = 0.0f;//计算费用的抽象方法//子类实现public abstract float cost();public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public String getDes() {return des;}public void setDes(String des) {this.des = des;}
}
创建LongBlack(美式咖啡)类来继承Drink:
public class LongBlack extends Drink{public LongBlack() {setDes("LongBlack");this.setPrice(10.0f);}@Overridepublic float cost() {return getPrice();}
}
创建装饰者:
public class Decorator extends Drink {private Drink obj;//组合Drinkpublic Decorator(Drink obj) {this.obj = obj;}@Overridepublic float cost() {//getPrice()自己的价格//递归计算costreturn super.getPrice() + obj.cost();}@Overridepublic String getDes() {return des + " " + super.getPrice() + " " + obj.getDes();}
}
创建装饰者特例Milk:
public class Milk extends Decorator {public Milk(Drink obj) {super(obj);setDes("牛奶");setPrice(3.0f);}
}
Client调用示例如下:
public class Client {public static void main(String[] args) {//点一杯美式咖啡Drink drink = new LongBlack();//点牛奶调料drink = new Milk(drink);//点牛奶调料drink = new Milk(drink);//计算价格System.out.println(drink.cost());}
}
输出如下:
三、装饰者模式的JDK应用
在 JDK 的 I/O中,我们列举出部分关系(FilterInpuStream相当于Decorator):
// FilterInpuStream相当于Decorator,充当了装饰者
// (version 1.8 : 52.0, super bit)
public class java.io.FilterInputStream extends java.io.InputStream {// Field descriptor #25 Ljava/io/InputStream;protected volatile java.io.InputStream in; //--组合了InputStream// Method descriptor #26 (Ljava/io/InputStream;)V// Stack: 2, Locals: 2protected FilterInputStream(java.io.InputStream arg0);/*省略*/
}
尚硅谷设计模式笔记-装饰者模式相关推荐
- 尚硅谷设计模式笔记-适配器模式
Table of Contents generated with DocToc 一.生活中的适配器 二.程序中的适配器模式 2.1 基本介绍 2.2 工作原理 三.类适配器模式 3.1 应用实例 3. ...
- 设计模式学习笔记——装饰(Decorator)模式
设计模式学习笔记--装饰(Decorator)模式 @(设计模式)[设计模式, 装饰模式, decorator] 设计模式学习笔记装饰Decorator模式 基本介绍 装饰案例 类图 实现代码 Dis ...
- Java 基础 第3阶段:高级应用——尚硅谷学习笔记(含面试题) 2023年
Java 基础 第 3 阶段:高级应用--尚硅谷学习笔记(含面试题) 2023 年 Java 基础 第 3 阶段:高级应用--尚硅谷学习笔记(含面试题) 2023 年 第 9 章 异常处理 9.1 异 ...
- 尚硅谷_CSS3 笔记
目录 什么是CSS3 选择器 基本选择器及其扩展 属性选择器 伪类与伪元素选择器 css声明的优先级 自定义字体&字体图标 复习1 新的UI方案 文本新增样式 opacity RGBA 文字阴 ...
- B站MySQL(尚硅谷)学习笔记
B站MySQL基础(尚硅谷)学习笔记 最近在学习数据库技术,并且把视频中的知识点进行了汇总,字数较多,仅供参考. 会持续更新 欢迎读者提出问题与错误,一起交流~ 视频前几集所讲述的基本知识: DB:数 ...
- 尚硅谷JavaSE笔记(四)
系列文章目录 尚硅谷JavaSE笔记(一) 尚硅谷JavaSE笔记(二) 尚硅谷JavaSE笔记(三) 尚硅谷JavaSE笔记(四) 文章目录 十六.File 类与 IO 流 1.java.io.Fi ...
- Java设计模式(装饰者模式-组合模式-外观模式-享元模式)
Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...
- 前端也要学系列:设计模式之装饰者模式
什么是装饰者模式 今天我们来讲另外一个非常实用的设计模式:装饰者模式.这个名字听上去有些莫名其妙,不着急,我们先来记住它的一个别名:包装器模式. 我们记着这两个名字来开始今天的文章. 首先还是上< ...
- 设计模式 之 装饰者模式
2019独角兽企业重金招聘Python工程师标准>>> 设计模式 之 装饰者模式 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对 ...
最新文章
- Social learning With Bayesian Agent and Random Decision Making
- 阿里全球数学竞赛第二届
- BZOJ1563:[NOI2009]诗人小G(决策单调性DP)
- JavaScript最全的10种跨域共享的方法
- richtextbox自动滚动到最下面_软网app:滚动截图将超长网页“一网打尽”
- xhtml文件的后缀名是什么?
- redis集群连接 java_Redis分布式集群和直连的Java客户端调用方式详解
- 用python效率办公_如何用Python提高办公(Excel)效率?
- 业务逻辑实现方式的讨论:存储过程 good or bad?
- 单片机的c语言程序控制直流电机,(单片机控制直流电机)毕业论文.doc
- (转)清华学霸演讲稿:永远不要说你已经尽力了
- 远程计算机用户名win7,Win7远程桌面连接设置的方法
- 拼多多API接口(附上我的可用API)
- 关于《未来软件是什么样子?》一文的讨论(2)
- Keil工程文件建立以及.hex文件的生成
- 如何求出二次贝塞尔曲线上面的各个点呢
- Android8.0 WIFI ap Tethering 相关知识
- 如何设置和取消Mac电脑的开机密码?
- [2021]Linux下C语言qrencode二维码生成库的基本使用和ARM开发板移植
- 尼古拉·特斯拉,到底有多神?
热门文章
- 自学python到什么程度可以找工作-Python学到什么程度才可以去找工作?掌握这4点足够了!...
- python下载安装教程-Python和Anoconda和Pycharm安装教程
- 0基础学python要多久-零基础学Python的过程有多难?需要多久?
- python语言-Python Insider
- 本地语音识别_语音 识别_语音识别 - 云+社区 - 腾讯云
- c语言写贪吃蛇什么水平_细致的C语言写贪吃蛇教程+详细思路-适合新手附源码...
- jQuery-dom和jQuery,入口函数(基本知识)
- oracle rac 启动失败has,oracle11.2.0.4 rac asm启动故障
- oracle plsql创建表空间,Oracle在PLSQL Developer上创建表空间和用户脚本 - 龙卷风的日志 - 网易博客...
- 语言密码加密变星号_为什么汉字不能设成密码,你想过吗?