设计模式代码实战-装饰者模式

1、问题描述

小明喜欢品尝不同口味的咖啡,他发现每种咖啡都可以加入不同的调料,比如牛奶、糖和巧克力。他决定使用装饰者模式制作自己喜欢的咖啡。
请设计一个简单的咖啡制作系统,使用装饰者模式为咖啡添加不同的调料。系统支持两种咖啡类型:黑咖啡(Black Coffee)和拿铁(Latte)。

输入描述
多行输入,每行包含两个数字。第一个数字表示咖啡的选择(1 表示黑咖啡,2 表示拿铁),第二个数字表示要添加的调料类型(1 表示牛奶,2 表示糖)。

输入示例
1 1
2 2

输出示例
Brewing Black Coffee
Adding Milk
Brewing Latte
Adding Sugar

2、装饰者模式

装饰模式可以在不定义⼦类的情况下动态的给对象添加⼀些额外的功能。具体的做法是装饰类包含原始对象的引用,为原始对象动态添加新的⾏为,⽽⽆需修改其代码
请添加图片描述

3、代码

import java.util.*;public class Main{public static void main(String[] args){Scanner sc=new Scanner(System.in);for(int i=0;sc.hasNextInt();i++){int t=sc.nextInt();int add=sc.nextInt();if(t==1){Coffee c=new BlackCoffee();ConcreteDecorate cD=new ConcreteDecorate(c);cD.display(add);}else if(t==2){Coffee c=new Latte();ConcreteDecorate cD=new ConcreteDecorate(c);cD.display(add);}}}
}
interface Coffee{void display(int tag);
}class BlackCoffee implements Coffee{@Overridepublic void display(int tag) {System.out.println("Brewing Black Coffee");}
}class Latte implements Coffee{@Overridepublic void display(int tag) {System.out.println("Brewing Latte");}
}
abstract  class Decorate implements Coffee{private  Coffee coffee;public Decorate(Coffee c){this.coffee=c;}@Overridepublic void display(int tag) {coffee.display(tag);}
}class ConcreteDecorate extends Decorate{public ConcreteDecorate(Coffee c) {super(c);}@Overridepublic void display(int tag) {super.display(tag);if (tag==2){System.out.println("Adding Sugar");}else if(tag==1){System.out.println("Adding Milk");}}}

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

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

相关文章

Ollama、FastGPT大模型RAG知识库结合使用案例

参考: https://ollama.com/download/linux https://doc.fastai.site/docs/intro/ https://blog.csdn.net/m0_71142057/article/details/136738997 https://doc.fastgpt.run/docs/development/custom-models/m3e/ https://concise-eater-d47.notion.site/Ollama-Fastgpt-b170…

优惠券布局的最终方案------css属性mask

先贴图&#xff1a; 以上这些都是通过mask去实现出来&#xff1a; <!DOCTYPE html><html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

华为配置通过流策略实现流量统计

配置通过流策略实现流量统计示例 组网图形 图1 配置流策略实现流量统计组网图 设备 接口 接口所属VLAN 对应的三层接口 IP地址 SwitchA GigabitEthernet1/0/1 VLAN 10 - - GigabitEthernet1/0/2 VLAN 20 - - GigabitEthernet1/0/3 VLAN 10、VLAN 20 - - S…

基于Python网络招聘数据可视化分析系统的设计与实现

基于Python网络招聘数据可视化分析系统的设计与实现 Design and Implementation of Python-based Network Recruitment Data Visualization Analysis System 完整下载链接:基于Python网络招聘数据可视化分析系统的设计与实现 文章目录 基于Python网络招聘数据可视化分析系统的…

【AIGC调研系列】原生多模态大模型Mini-Gemini的优势

香港中文大学的原生多模态大模型Mini-Gemini具有以下优势&#xff1a; 兼容性和高效性&#xff1a;Mini-Gemini能够兼容各种大型语言模型&#xff08;LLMs&#xff09;&#xff0c;参数范围从2B到34B&#xff0c;实现了高效的任意推断。这一设置使Mini-Gemini在零样本基准测试…

本地搭建属于你自己的AI搜索引擎 支持多家AI模型

FreeAskInternet 是一个完全免费、私有且本地运行的搜索聚合器&#xff0c;并使用 MULTI LLM 生成答案&#xff0c;无需 GPU。用户可以提出问题&#xff0c;系统将进行多引擎搜索&#xff0c;并将搜索结果合并到LLM中&#xff0c;并根据搜索结果生成答案。全部免费使用。 项目…

全排列(函数法)

全排列 1.next_permutation( ) 和 prev_permutation( ) 函数 1&#xff09;next_permutation( ) 函数 next_permutation( ) 函数用于判断当前序列是否存在按照字典序变得更大一级的下一个序列并变为它&#xff1b;此函数会按照字典序进行重新排列&#xff0c;如果存在下一个序…

数字孪生助力平交道口拆除,推动可持续交通计划

Bentley 的数字孪生技术助力优化材料的使用&#xff0c;节约时间 15%&#xff0c;降低碳排放量 30% 改变公共交通和社区的连通性 维多利亚州的平交道口拆除项目目标是到 2030 年拆除墨尔本 110 个平交道口&#xff0c;这是该州历史上最重要的铁路基础设施项目之一。该项目不仅…

NLP和LLMs: 理解它们之间的区别

NLP&#xff08;自然语言处理&#xff09;和LLMs&#xff08;大型语言模型&#xff09;都与处理自然语言相关&#xff0c;但它们的重点和范围略有不同。 自然语言处理&#xff08;NLP&#xff09;&#xff1a; 定义&#xff1a; 自然语言处理&#xff08;NLP&#xff09;是人…

面试算法-173-二叉树的直径

题目 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,…

学习 Rust 的第三天:如何编写一个猜数字的游戏

欢迎来到学习 Rust 的第三天&#xff01;我参考的是 Steve Klabnik 的《Rust 编程语言》一书。今天我们要用 Rust 来制作一个猜数字的游戏。 引言 我们将创建一个游戏&#xff0c;它会在 1 到 100 之间随机选择一个数字&#xff0c;用户需要猜出这个数字&#xff0c;猜对了就…

什么是UX设计?

在这个先进的世界中&#xff0c;大城市都被称之为科技之都&#xff0c;在那里&#xff0c;你会经常发现人们在谈论各种应用程序的设计。如果你对应用程序设计有浓烈的兴趣&#xff0c;那你应该去了解一下它的两个基本方面&#xff0c;也就是 UX 设计和 UI 设计。UX 设计旨在处理…

《中医病证分类与代码》-中医疾病分类数据库

《中医病症分类与代码》由国家中医药管理局2020年底修订&#xff0c;目的是为中医疾病及证候的分类提供统一的规范。规定2021年起&#xff0c;各中医机构的临床科室及基层中医药的医师都应按照最新修订的《中医病症分类与代码》规范来填报病案及病历。 中医病证分类与代码数据库…

探索C# 11与.NET 7:入门指南与跨平台开发

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

【代码随想录算法训练营第五十五天 | LeetCode392.判断子序列 、115.不同的子序列】

代码随想录算法训练营第五十五天 | LeetCode392.判断子序列 、115.不同的子序列 一、392.判断子序列 解题代码C&#xff1a; class Solution { public:bool isSubsequence(string s, string t) {vector<vector<int>> dp(s.size() 1, vector<int>(t.size()…

正则表达式(Regular Expression)

正则表达式很重要&#xff0c;是一个合格攻城狮的必备利器&#xff0c;必须要学会&#xff01;&#xff01;&#xff01; &#xff08;参考视频&#xff09;10分钟快速掌握正则表达式&#xff08;奇乐编程学院&#xff09;https://www.bilibili.com/video/BV1da4y1p7iZ在线测试…

算法4:x的平方根

在不使用 sqrt(x)函数的情况下&#xff0c;得到x的平方根的整数部分 重点考察:二分法、牛顿迭代 暴力法&#xff1a; public class Test4 {public static void main(String[] args){int a 80;for (int i1;i*i<a;i){if(i*i8){System.out.println(i);}if(i*i<a &&am…

C++进阶学习:C++11特性

C11是C语言的一个重要版本&#xff0c;引入了许多新的特性和改进。接下来进行这些新特性的学习&#xff01; 1.nullptr的引入 在C语言中&#xff0c;NULL表示空地址。而C中NULL被定义为字面量0。 这里我们通过打印x的类型名&#xff0c;发现NULL的类型名是int&#xff0c;而对…

React构建组件的方式有哪些,有什么区别?

React构建组件的方式有哪些&#xff0c;有什么区别&#xff1f; 1. 函数组件1.1 特点 2. 类组件2.1特点 3. 高阶组件3.1特点 4. 自定义Hook4.1特点 React 组件是构成React应用的基本单元。在React中&#xff0c;有几种不同的方式可以创建组件&#xff0c;每种方式都有其特定的用…

算法与数据结构要点速学——时间复杂度(大 O)

时间复杂度 (大 O) 首先&#xff0c;我们来谈谈常用操作的时间复杂度&#xff0c;按数据结构/算法划分。然后&#xff0c;我们将讨论给定输入大小的合理复杂性。 数组&#xff08;动态数组/列表&#xff09; 规定 n arr.length, 在结尾添加或删除元素&#xff1a;O(1)从任意…