Java接口实战:模拟咖啡制作、订购与消费完整流程(day14)

news2024/11/23 21:25:11

定义接口

// 咖啡制作接口  
interface CoffeeMaker {  
    Coffee makeCoffee(String type);  
}  
  
// 咖啡店接口  
interface CoffeeShop {  
    void orderCoffee(String type, CoffeeConsumer consumer);  
}  
  
// 咖啡消费者接口  
interface CoffeeConsumer {  
    void receiveCoffee(Coffee coffee);  
}  
  
// 咖啡类  
class Coffee {  
    private String type;  
  
    public Coffee(String type) {  
        this.type = type;  
    }  
  
    @Override  
    public String toString() {  
        return "Coffee of type: " + type;  
    }  
}

实现接口

// 咖啡工厂实现类  
class CoffeeFactory implements CoffeeMaker {  
    @Override  
    public Coffee makeCoffee(String type) {  
        System.out.println("CoffeeFactory is making a coffee of type: " + type);  
        return new Coffee(type);  
    }  
}  
  
// 咖啡店实现类  
class LocalCoffeeShop implements CoffeeShop {  
    private final CoffeeMaker coffeeMaker;  
  
    public LocalCoffeeShop(CoffeeMaker coffeeMaker) {  
        this.coffeeMaker = coffeeMaker;  
    }  
  
    @Override  
    public void orderCoffee(String type, CoffeeConsumer consumer) {  
        System.out.println("LocalCoffeeShop is ordering a coffee of type: " + type);  
        Coffee coffee = coffeeMaker.makeCoffee(type);  
        consumer.receiveCoffee(coffee);  
    }  
}  
  
// 用户实现类  
class CoffeeLover implements CoffeeConsumer {  
    @Override  
    public void receiveCoffee(Coffee coffee) {  
        System.out.println("CoffeeLover received: " + coffee);  
    }  
}

测试程序

public class CoffeeFlowDemo {  
    public static void main(String[] args) {  
        // 创建咖啡工厂  
        CoffeeMaker coffeeMaker = new CoffeeFactory();  
  
        // 创建咖啡店  
        CoffeeShop coffeeShop = new LocalCoffeeShop(coffeeMaker);  
  
        // 创建用户  
        CoffeeConsumer coffeeLover = new CoffeeLover();  
  
        // 咖啡店订购咖啡并给用户  
        coffeeShop.orderCoffee("Latte", coffeeLover);  
    }  
}

CoffeeMaker接口定义了制作咖啡的方法,CoffeeShop接口定义了订购咖啡的方法,CoffeeConsumer接口定义了接收咖啡的方法。CoffeeFactoryLocalCoffeeShopCoffeeLover分别实现了这些接口,并模拟了咖啡制作、订购和接收的流程。

总结:今天老师讲到的接口有一点理解不过来,只理解了一个大概,java的世界从接口开始,理解接口才能够真正学会java,看来得多敲代码了。

在这里插入图片描述

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

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

相关文章

预处理详解(一) -- 预定义符号与#define定义

目录 一. 预定义符号二. #define1.#define定义常量2.#define定义宏3.带有副作用的宏参数4.宏替换的规则5.宏和函数的对比 一. 预定义符号 %s _ _FILE_ _ //文件 %s _ _ DATE_ _ //日期 %s _ _ TIME_ _ //时间 %d _ _ LINE_ _ //行号 %d _ _ STDC_ _ //如果编译器支持 ANSI C,那…

python基础——异常捕获【try-except、else、finally】

📝前言: 这篇文章主要介绍一下python基础中的异常处理: 1,异常 2,异常的捕获 3,finally语句 🎬个人简介:努力学习ing 📋个人专栏:C语言入门基础以及python入门…

[图解]DDD领域驱动设计伪创新-通用语言01

0 00:00:01,420 --> 00:00:04,110 今天我们来说一个 1 00:00:04,390 --> 00:00:07,450 领域驱动设计的伪创新,通用语言 2 00:00:12,780 --> 00:00:13,960 通用语言 3 00:00:14,460 --> 00:00:14,830 4 00:00:14,830 --> 00:00:15,940 英文叫 5 0…

Python | Leetcode Python题解之第2题两数相加

题目: 题解: # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optiona…

阿里云服务器经济型e实例特点、适用场景介绍和问题解答

阿里云服务器ECS经济型e系列是阿里云面向个人开发者、学生、小微企业,在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器,CPU处理器采用Intel Xeon Platinum架构处理器,支持1:1、1:2、1:4多种处理器内存配比&#xff0c…

ADC--数模转换器的使用

目录 前言 ADC接口使用 配置准备 确定引脚编号 光敏电阻--PF7​编辑 ADC3_IN5 开始配置 实验进阶 MQ_3--酒精传感器、水位传感器、火焰传感器 前言 ADC(analog-digital conversion)顾名思义模拟数字转换器,把外界的譬如温度、湿度、酒精含量、水位、特殊光波等等的现实…

小狐狸JSON-RPC:wallet_addEthereumChain(添加指定链)

wallet_addethereumchain(添加网络) var res await window.ethereum.request({"method": "wallet_addEthereumChain","params": [{"chainId": "0x64", // 链 ID (必填)"…

数据结构 - 算法效率|时间复杂度|空间复杂度

目录 1.算法效率 2.时间复杂度 2.1定义 2.2大O渐近表示法 2.3常见时间复杂度计算举例 3.空间复杂度 3.1定义 3.2常见空间复杂度计算举例 1.算法效率 算法的效率常用算法复杂度来衡量,算法复杂度描述了算法在输入数据规模变化时,其运行时间和空间…

6.5物联网RK3399项目开发实录-驱动开发之LCD显示屏使用(wulianjishu666)

90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】 链接:https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwdc53f LCD使用 简介 AIO-3399J开发板外置了两个LCD屏接口,一个是EDP,一个是LVDS,接口对应板…

Profinet转ModbusTCP:从站设备转换与集成案例

本案例旨在探讨如何将Modbus TCP设备数据成功地接入到西门子PROFINET网络中。为了实 现这一目标,我们将使用西门子S7-1200型PLC以及耐特森Profinet转ModbusTCP网关作为 关键设备。为了模拟Modbus从站,我们将使用电脑安装modbus poll软件。首先需要了解Pr…

PCL点云处理之重复随机采样一致性(RRANSAC法)平面拟合(二百三十七)

PCL点云处理之重复随机采样一致性(RRANSAC法)平面拟合(二百三十七) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 pcl::SAC_RRANSAC"是 PCL库中的一个方法,是 RANSAC 方法的改进版本,通过多次重复采样和模型拟合来提高鲁棒性。RRANSAC 的思想是在 RANSAC 的基…

从0开始搭建基于VUE的前端项目(一) 项目创建和配置

准备与版本 安装nodejs(v20.11.1)安装vue脚手架(@vue/cli 5.0.8) ,参考(https://cli.vuejs.org/zh/)vue版本(2.7.16),vue2的最后一个版本vue.config.js的配置详解(https://cli.vuejs.org/zh/config/)element-ui(2.15.14)(https://element.eleme.io/)vuex(3.6.2) (https://…

2024年天津仁爱学院退役大学生士兵专升本专业课报名确认安排

天津仁爱学院2024年高职升本科退役大学生士兵专业课报名确认及考试安排的通知 按照市高招办《2024年天津市高职升本科招生实施办法》(津招办高发〔2023〕14号)文件要求,天津仁爱学院2024年高职升本科退役大学生专业课考试报名、确认及考试工…

【C++】C到C++的入门知识

目录 1、C关键字 2、命名空间 2.1 命名空间的定义 2.2 命名空间的使用 2.2.1 加命名空间名称及作用域限定符 2.2.2 使用using将命名空间中某个成员引入 2.2.3 使用using namespace 命名空间名称引入 3、C输入&输出 4、缺省参数 4.1 缺省参数的概念 4.2 缺省参数的…

ctf.show_web

11.ctf.show_web11 解题步骤 密码为空,用 bp 抓包,去掉 session。 $password$_SESSION[password]:输入的password和session的结果一致 后端代码就是拿这个session的value值与我们输入的密码进行匹配, 由于这个value值我没解密出来, 所以这…

常用的6个的ChatGPT网站,国内可直接访问!

AIGC 🌐 链接:AIGC🏷️ 标签:AI绘图 AI聊天 GPT-4 免费 收费 需登录📝 简介:AIGC结合了ChatGPT与Midjourney,提供GPT-3.5、GPT-4及最新的Claude3模型。支持语音对话、识图、文档解析和联网等功…

Intellij IDEA 类注释模板设置

1、配置全局USER 在此配置全局USER,用于填充自动生成的注释中的作者author属性。 注释模板中的user参数是默认是获取系统的用户(当然注释作者也可以直接写固定值),如果不想和系统用户用同一个信息,可以在IDEA中进行配…

通过PandasAI使用自然语言进行数据分析

通过PandasAI使用自然语言进行数据分析 介绍 ​ PandasAI是一个Python库,可以很容易地用自然语言向数据提问。它可以帮助您使用生成人工智能来探索、清理和分析数据。 使用PandasAI 这里使用Anaconda和Jupyter使用PandasAI 进入一个文件目录 创建一个 Notebook …

31.Python从入门到精通—Python数据压缩 性能度量 测试模块

31.从入门到精通:Python数据压缩 性能度量 测试模块 个人简介数据压缩性能度量测试模块 个人简介 🏘️🏘️个人主页:以山河作礼。 🎖️🎖️:Python领域新星创作者,CSDN实力新星认证&#xff0c…

【3D-GS】Gaussian Splatting SLAM——基于3D Gaussian Splatting的全网最详细的解析

【3D-GS】Gaussian Splatting SLAM——基于3D Gaussian Splatting的定SLAM 3D-GS 与 Nerf 和 Gaussian Splatting1. 开山之作 Nerf2. 扛鼎之作 3D Gaussian Splatting2.1 什么是3D高斯?高斯由1D推广到3D的数学推导2.2 什么是光栅化?2.3 什么是Splatting?2.4 什么是交叉优化?…