装饰者设计模式

package com.jmj.pattern.decorator;/*** 快餐类(抽象构建角色)*/
public abstract class FastFood {private float price;private String desc;public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public FastFood() {}public FastFood(float price, String desc) {this.price = price;this.desc = desc;}public abstract float cost();
}
package com.jmj.pattern.decorator;/*** 炒面(具体的构件角色 )*/
public class FriedNoodles extends FastFood{public FriedNoodles() {super(12,"炒面");}@Overridepublic float cost() {return getPrice();}}
package com.jmj.pattern.decorator;public class FriedRice extends FastFood{public FriedRice() {super(10,"炒饭");}@Overridepublic float cost() {return getPrice();}
}
package com.jmj.pattern.decorator;/*** 装饰者类(抽象装饰者角色)*/
public abstract class Garnish extends FastFood{//声明快餐类的变量private FastFood fastFood;public FastFood getFastFood() {return fastFood;}public void setFastFood(FastFood fastFood) {this.fastFood = fastFood;}public Garnish(FastFood fastFood,float price, String desc) {super(price, desc);this.fastFood = fastFood;}
}
package com.jmj.pattern.decorator;/***  鸡蛋类 (具体的装饰者角色)*/
public class Egg extends Garnish{public Egg(FastFood fastFood) {super(fastFood, 1, "鸡蛋");}@Overridepublic float cost() {//计算价格return getPrice()+getFastFood().cost();}@Overridepublic String getDesc() {return super.getDesc()+getFastFood().getDesc();}
}
package com.jmj.pattern.decorator;/***  鸡蛋类 (具体的装饰者角色)*/
public class Bacon extends Garnish{public Bacon(FastFood fastFood) {super(fastFood, 2, "培根");}@Overridepublic float cost() {//计算价格return getPrice()+getFastFood().cost();}@Overridepublic String getDesc() {return super.getDesc()+getFastFood().getDesc();}
}
package com.jmj.pattern.decorator;public class Client {public static void main(String[] args) {//点一份炒饭FastFood friedRice = new FriedRice();System.out.println(friedRice.getDesc()+"  "+friedRice.cost()+"元");System.out.println("============");//在上面的炒饭中加一个鸡蛋friedRice=new Egg(friedRice);friedRice=new Egg(friedRice);System.out.println(friedRice.getDesc()+"  "+friedRice.cost()+"元");friedRice = new Bacon(friedRice);System.out.println(friedRice.getDesc()+"  "+friedRice.cost()+"元");}
}

 其实就是 装饰者类 继承了 原本的 父抽象类,又聚合了 父抽象类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/215042.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国上市公司漂绿程度及其同构指数(多种测算方法,2012-2022年)

数据简介:20 世纪 90 年代开始,国际上关于绿色市场和绿色管理的学术文献日渐丰富,众多企业积极响应碳排放政策的号召,但其中有多少企业是实实在在的进行碳减排技术创新,又有多少企业打着绿色低碳行为的口号来吸引眼球、…

python+requests+pytest+allure自动化框架

1.核心库 requests request请求 openpyxl excel文件操作 loggin 日志 smtplib 发送邮件 configparser unittest.mock mock服务 2.目录结构 base utils testDatas conf testCases testReport logs 其他 2.1base base_path.py 存放绝对路径,dos命令或Jenkins执行…

100%纯血鸿蒙来了,Android程序员影响甚大

“纯血鸿蒙”来了! 近日,美团、网易、今日头条、钉钉等多家互联网头部企业密集发布对鸿蒙系统相关人才的招聘信息,再度引爆市场对“纯血鸿蒙”的热议。 操作系统之“国货之光” 自2019年8月发布至今,鸿蒙系统已经更新到4.0版本…

pulseaudio是如何测试出音频延迟的

通常专业的音频设备生产厂商都有专业的设备来测试精确的音频链路延时。 那么没有专业设备怎么测试出音频延迟呢?如下图,我们可以看到pulseaudio可以测试出硬件音频延迟。 那么,他是怎么测试出硬件延迟的呢?他的理论依据是什么呢?接下来我带大伙一起探索一下。 /*占位…

github国内访问小解(windows)

git 下载安装 使用 github 前必须确保电脑上已经安装了 Git,可以从 Git 官方网站去下载。 官方的网站在国内访问会比较慢,这里可以选择国内镜像:https://registry.npmmirror.com/binary.html?pathgit-for-windows/ github 之旅 确认电脑已…

2023快速成为接口测试高手:实用指南!

大量线上BUG表明,对接口进行测试可以有效提升产品质量,暴露手工测试时难以发现的问题,同时也能缩短测试周期,提升测试效率。但在实际执行过程中,接口测试被很多同学打上了“上手难,门槛高”的标签。 本文旨…

vivado产生报告阅读分析20-QOR

Report QoR Suggestions report_qor_suggestions 命令是处理 QoR 建议对象时使用的主要命令。 QoR 建议对象会创建命令和属性来改善设计的时序性能( 欲知详情 , 请参阅 QoR 建议 ) 。 report_qor_suggestions 命令可执行两项任务 &am…

(Java版)新一代最强开源UI自动化测试神器Playwright(模拟移动设备和浏览器行为)

使用 Playwright,你可以在任何浏览器上测试你的应用程序,也可以模拟真实设备,例如手机或平板电脑。只需配置你想要模拟的设备,Playwright 就会模拟浏览器行为,例如“userAgent”、“screenSize”、“viewport”以及是否…

HashMap的实现原理,HashMap方法详解,hash()计算的原理,扩容机制

文章目录 说一下HashMap的实现原理(非常重要)①HashMap的工作原理HashMap存储结构常用的变量HashMap 构造函数tableSizeFor() put()方法详解hash()计算原理resize() 扩容机制get()方法为什么HashMap链表会形成死循环 说一下HashMap的实现原理(非常重要) HashMap概述&#xff1…

RevCol:可逆的柱状神经网络

文章目录 摘要1、简介2、方法2.1、Multi-LeVEl ReVERsible Unit2.2、可逆列架构2.2.1、MACRo设计2.2.2、MicRo 设计 2.3、中间监督 3、实验部分3.1、图像分类3.2、目标检测3.3、语义分割3.4、与SOTA基础模型的系统级比较3.5、更多分析实验3.5.1、可逆列架构的性能提升3.5.2、可…

解决在Windows10或Windows11下无权限修改hosts文件

解决在Windows10或Windows11下无权限修改hosts文件,无法写入内容 1、首先在开始菜单中找到这个 2、接着输入: C:\Windows\System32\drivers\etc3、再次输入以下命令行:notepad hosts ,并回车: notepad hosts 4、然后…

gitlab各版本安装注意点:

研发团队在安装gitlab各版本过程中可能遇到各种问题,为了后续容易查看特将我们在实践过程中遇到的各类问题要点总结如下: gitlab 10.8.3 (564c342)安装 centos Linux yum安装网址查找网址:gitlab/gitlab-ce - Results for gitla…