如何设计一个ATM | OOD 面向对象高频面试题及解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 如何设计一个ATM | OOD 面向对象高频面试题及解析

问题描述

如何设计一个ATM Machine?

解题思路

这是一道常考的OOD面向对象面试题,属于 Real-life Object Deisgn, 类似面试题型有Vending Machine 等。

更多题型课查看领扣题库官网

1.Clarify

ATM机的Input和Output是什么?
Assumption: Input 是卡, output 是现金

Input 有什么限制吗?
Assumption: 只能是debit card

output 有什么限制吗?
Assumption: 只能是20美元的倍数

AOutput 会不足吗?
Assumption: ATM永远有足够的余额 (Bonus: 这里可以考虑如果不够的话应该怎么处理)

Input 有什么特点?
Assumption: 一张卡可能有多个账户 (Bonus: 这个不太容易想到, 没想到也没关系,我们可以先按照一个account来做)

2.Core objects

Debit Card

ATM Machine

Account

3.Use cases

Take debit card

Authorization / Log in

(Optional - 如果一张卡能有多个account就需要这个) Select account

Check balance

Deposite money

Withdraw money

Log out

4.Classes

ATM Machine
float balance (Optional - 如果ATM机余额有限制就需要这个)

Session currentSession ( Tips : 如果一个主体,它的操作<比如check balance / deposite / withdraw>是针对每一个用户的, 那么经常会考虑到加入Session这个Class。实践中如果碰到需要login/logout的主体,经常会用到Session)

void takeDebitCard (DebitCard card)

List login (String passcode)

void selectAccount (Account account)

float checkBalance ()

void depositeMoney (float amount)

float withDrawMoney (float amount)

void logOut ()

Session
DebitCard currentDebitCard

Account currentAccount

Account
float balance

void depositeMoney (float amount)

withDrawMoney (float amount)

5.Correctness

增加各式的Exceptions

对于ATM机,有许多种Design pattern可以适用,其中比较合适的就有我们《OOD面向对象专题》课上讲过的State Design Pattern, 大家可以自己思考有哪些合适的states。

6.总结

ATM Machine作为一道real life object的题目,做法和我们上课讲过的解法大同小异,其中值得注意的三点分别是对Session的使用;可能出现各式各样的Exception; 以及一张卡对应多个 Account的business logic。

相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
92 2
|
5月前
|
数据安全/隐私保护 Ruby
深入解析Ruby 面向对象
【8月更文挑战第28天】
57 8
|
1月前
|
Java 程序员
面试官的加分题:super关键字全解析,轻松应对!
小米,29岁程序员,通过一个关于Animal和Dog类的故事,详细解析了Java中super关键字的多种用法,包括调用父类构造方法、访问父类成员变量及调用父类方法,帮助读者更好地理解和应用super,应对面试挑战。
41 3
|
2月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
109 2
|
2月前
|
存储 NoSQL MongoDB
MongoDB面试专题33道解析
大家好,我是 V 哥。今天为大家整理了 MongoDB 面试题,涵盖 NoSQL 数据库基础、MongoDB 的核心概念、集群与分片、备份恢复、性能优化等内容。这些题目和解答不仅适合面试准备,也是日常工作中深入理解 MongoDB 的宝贵资料。希望对大家有所帮助!
|
2月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
70 1
|
4月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
505 37
|
4月前
|
缓存 Android开发 开发者
Android RecycleView 深度解析与面试题梳理
本文详细介绍了Android开发中高效且功能强大的`RecyclerView`,包括其架构概览、工作流程及滑动优化机制,并解析了常见的面试题。通过理解`RecyclerView`的核心组件及其优化技巧,帮助开发者提升应用性能并应对技术面试。
116 8
|
4月前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
85 8
|
5月前
|
Java 开发者 C++

热门文章

最新文章

推荐镜像

更多