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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 如何设计一个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。

相关文章
|
3月前
|
数据安全/隐私保护 Ruby
深入解析Ruby 面向对象
【8月更文挑战第28天】
44 8
|
3月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
5天前
|
存储 NoSQL MongoDB
MongoDB面试专题33道解析
大家好,我是 V 哥。今天为大家整理了 MongoDB 面试题,涵盖 NoSQL 数据库基础、MongoDB 的核心概念、集群与分片、备份恢复、性能优化等内容。这些题目和解答不仅适合面试准备,也是日常工作中深入理解 MongoDB 的宝贵资料。希望对大家有所帮助!
|
10天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
42 1
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
365 37
|
2月前
|
缓存 Android开发 开发者
Android RecycleView 深度解析与面试题梳理
本文详细介绍了Android开发中高效且功能强大的`RecyclerView`,包括其架构概览、工作流程及滑动优化机制,并解析了常见的面试题。通过理解`RecyclerView`的核心组件及其优化技巧,帮助开发者提升应用性能并应对技术面试。
73 8
|
2月前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
64 8
|
3月前
|
Java 数据处理 开发者
【Java基础面试十二】、说一说你对面向对象的理解
这篇文章阐述了面向对象是一种以类和对象为基础,通过封装、继承和多态等概念来模拟现实世界中的事物及其相互关系的程序设计方法,它强调以事物为中心进行思考和系统构造,与结构化程序设计相比,更符合人类的自然思维方式。
【Java基础面试十二】、说一说你对面向对象的理解
|
3月前
|
Java
【Java基础面试十三】、面向对象的三大特征是什么?
这篇文章介绍了面向对象程序设计的三大基本特征:封装、继承和多态,其中封装隐藏对象实现细节,继承实现软件复用,多态允许子类对象表现出不同的行为特征。
【Java基础面试十三】、面向对象的三大特征是什么?
|
3月前
|
Java 开发者 C++

推荐镜像

更多