ood解题思路----实物类面向对象

news2024/11/25 14:45:33

实物类

下面以vending machine为例

5C

  • Clarify
    • What
      1. 输入输出是什么?
      2. 大小是否有限制? 无
      3. What items does this vending machine sell? coke、sprite、mountain dew
      4. What to do when an item sold out?
      5. What are the supposed payment methods? 可以使用strategy design Pattern,不同的付款方式调用不同的接口。此处假设只接受硬币
    • How
      1. how to select items to purchase?
  • Core object
    在这里插入图片描述
  • Use Cases
    • select item
    • insert coin
    • execute transaction
    • cancel transaction
    • refill items
  • classes
    • select item
      1. 使用Map<String, Item> itemIdentifiers对应按键和饮料。但是这样有个漏洞,就是可能A1按键对应的Item已经卖光了,这样就会导致NullPointerException的错误。要避免这样的问题,我们可以增加一个ItemInfo的类,然后在VendingMachine中增加一个Map<ItemInfo, List<Item>> items; Map<String, ItemInfo> itemIdentifiers;,记录这个按键的信息,Item的信息以及剩余量
    • insert coin
      1. void insertCoins(List<Coin> coins)
    • execute transaction
      1. get the current selected item: ItemInfo currentSelection;
      2. compare the item price ans inserted coins: List<Coin> currentCoins;
      3. if not enough money, throw an exception:
      4. else, return the item purchased: Item executeTransaction();
      5. refund if any: 上面的函数返回值只是Item,但是可能存在要找零的情况,可以将上面的函数修改为:Pair<Item, List<Coin>> executeTransaction(); List<Coin> refund();
    • cancel transaction
      1. return the current coins that has been inserted. List<Coin> cancelTransaction();
    • refill items
      1. void refillItems(List<Item> items);更新Map
        bad:
        在这里插入图片描述
        good:无论stock的结构有多么复杂,这样设计都可以避免暴露在vending machine中;这样设计也更方便去maintain
        在这里插入图片描述
        在这里插入图片描述

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

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

相关文章

89C52RC普中单片机

1.静态数码管显示 数组函数 #include<regx52.h> void Delay(unsigned int xms);//带参延时函数ms /*静态数码管 P0&#xff1a;表示数码管的abcdefg dp P2.234表示位选 P21110 0011是第0号数码管 */ unsigned char NixieTable[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x…

Arduino Proteus仿真出租车计价器起步价白天黑夜区分LCD1602光电测速-0047

Arduino Proteus仿真出租车计价器起步价白天黑夜区分LCD1602光电测速-0047 Proteus仿真小实验&#xff1a; Arduino Proteus仿真出租车计价器起步价白天黑夜区分LCD1602光电测速-0047 功能&#xff1a; 硬件组成&#xff1a;ARDUINO 开发板、 LCD1602 、信号发生器、多个电…

CVE-2022-31325

文章目录 CVE-2022-30887一、漏洞介绍二、渗透步骤1、打开网站2、查找注入点3、截取数据包4、SQL注入&#xff08;1&#xff09;、探测数据库&#xff08;2&#xff09;、探测数据表&#xff08;3&#xff09;、探测列名&#xff08;4&#xff09;、查看flag值 CVE-2022-30887 …

Modbus协议在TCP/IP上的运用

文章目录 1 Modbus规约2 Modbus TCP/IP2.1 概要2.2 0x01读线圈2.3 0x03读保持寄存器2.4 0x05写单个寄存器2.5 0x06写单个寄存器2.6 0x10写多个寄存器 3 实例&#xff08;ADU&#xff09; 1 Modbus规约 Modbus规约是典型的一问一答的通信规约&#xff0c;支持多种电气接口&#…

android checkBox的使用

一、前言&#xff1a;之前工作中遇到的checkbox的使用是左边一个复选框&#xff0c;右边一个text。系统学完之后发现那样做的话有点别扭&#xff0c;还是中规中矩的舒坦。记录一下学习经过。 二、代码展示&#xff1a; 1.使用系统自带的checkbox插件。 创建一个CheckBoxActiv…

【Spring -02学习】

Spring 笔记记录 1. spring整合mybatis 注解开发2. spring整合junit3. IOC底层核心原理3.1 层次结构3.2 组件扫描器3.3 自定义导入器3.4 自定义注册器3.5 bean初始化过程解析 4.AOP配置4.1 AOP核心概念4.2 AOP入门案例4.2.1 XML方式4.2.2 注解方式 4. 3 切入点的三种形式4.4 五…

基于Python爬虫+K-means机器学习算法今日热点新闻推荐系统——热点推荐、热词呈现及个性化分析(含全部工程源码)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境Pycharm 环境相关库下载 模块实现1. 数据爬取2. 新闻处理与聚类3. 新闻推荐 系统测试1. 数据准备2. 文本聚类3. 热点新闻推荐 工程源代码下载其它资料下载 前言 本项目基于网络爬虫技术&#xff0c;用于爬取新闻…

01-创建项目-工具使用备忘录

创建项目 Keil5 &#xff08;编写程序工具&#xff09;生成输出hex文件 STC-ISP &#xff08;下载程序辅助工具&#xff09;辅助功能生成代码下载程序到单片机中运行 Keil5 &#xff08;编写程序工具&#xff09; 创建项目 创建好目录文件夹 选择对应芯片型号 不用自动生成启…

VMware虚拟机迁移到阿里云

1. 前言 最近公司内部研发部门有几台jenkins build机器运行在VMware平台上面&#xff0c;由于本地VMware平台底层计算资源不足导致虚拟机运行速度特别慢&#xff0c;每次版本发布都要build好久&#xff0c;而且VMware有时候计算资源不足&#xff0c;还会自动给占用资源大的机器…

nginx中的防盗链原理

一、什么是资源盗链 资源盗链是指内容不在自己服务器上&#xff0c;而通过技术手段&#xff0c;绕过别人的限制&#xff0c;将别人的内容&#xff0c;比如热门的图片放到自己页面上&#xff0c;展示给用户&#xff0c;以此来盗取别人网站的流量&#xff0c;即蹭流量。 简而言…

Mybatis【Map传参与模糊查询】

使用 Map 传参 当我们的实体类或者对应的数据库表的字段过多时&#xff0c;应当考虑使用Map&#xff01; 我们之前通过对象传递参数来实现增改时&#xff0c;是通过传递对象做参数 来实现的&#xff1a; 我们在测试类中调用接口中的方法后&#xff0c;UserMapper.xml 会自动根…

阿里云短信发送接口实现

使用阿里云短信接口发送验证码 1. 引入依赖 springboot 工程引入web 引入 lombok 关键代码引入 <!--阿里云短信服务--> <dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.23<…

记录一次重装windows11没有WiFi驱动的排错错误示范

机器是自己组装的台式机&#xff1a; 查看主板的幸好&#xff0c;机箱我是没看懂&#xff0c;然后台式机 bios或者 msinfo32都可以查看 显示&#xff1a; 如下的页面进行查询&#xff1a; 下载 windows的驱动程序和工具包&#xff0c;结果显示华硕官网没有对应的驱动&#xf…

在线Markdown编辑器

一直在寻找一款好用的在线Markdown编辑器&#xff0c;但是好像没有比较知名的简洁的&#xff0c;寻思自己赶紧搞一个&#xff0c;于是找了项目&#xff0c;手动搞了一个上线了&#xff0c;效果不错&#xff0c;特性拉满。欢迎试用 支持“标准” Markdown / CommonMark 和 Gith…

点云可视化

pcl::visualization::CloudViewer 与 pcl::visualization::PCLVisualizer的区别 pcl::visualization::CloudViewer是一个简单的点云查看器类&#xff0c;提供了一个简单的接口来在窗口中显示点云数据。它可以快速地显示点云&#xff0c;并且只需要几行代码即可实现简单的点云查…

数据结构与算法:链表、树、图、堆、散列表

1 链表 链表是线性数据结构&#xff08;数据元素之间存在着“一对一”关系&#xff09;&#xff0c;链表中的每个元素是一个包含数据data和引用字段的对象&#xff0c;引用字段只有next为单向链表&#xff0c;同时又prev和next为双向链表。 1.1 链表基本操作 链表读取第 i 个…

java集合体系结构笔记

java集合的特点&#xff1a; 提供一种存储空间可变的存储模型&#xff0c;存储的数据容量可以随时发生改变。 单列数据&#xff1a; 双列数据&#xff1a; 单列数据集合存储实现接口Collection 双列数据集合存储实现接口Map 单列数据集合&#xff0c;数据值可重复存储实…

git杀手级功能 —— 分支管理

目录 分支介绍 创建分支 切换分支 和并分支 删除分支 合并冲突 分支管理策略 分支策略 bug分支 其他问题 强行删除临时分支 结语 分支介绍 在版本回退里发现&#xff1a;每次提交&#xff0c;git都会把它们穿成一条时间线&#xff0c;而这条时间线就可以理解为一个分支…

数据库监控与调优【十八】—— Percona Toolkit调优神器安装与使用

Percona Toolkit调优神器安装与使用 Percona Toolkit安装 本文基于Percona Toolkit 3.2.0&#xff0c;理论支持所有版本。 Percona Toolkit是一款MySQL世界里面非常实用的工具套件&#xff0c;如何安装它。 Windows系统 不支持。详见https://forums.percona.com/discussion/…