OOD 高頻面試題 | 如何設計一個ATM
02-16
原文地址:如何設計一個 ATM Machine
問題描述:
如何設計一個ATM Machine?
解答思路:
首先,這是一道Real life object的題目, 類似題型(Vending Machine)
一、Clarify- ATM機的Input和Output是什麼?
Assumption: Input 是卡, output 是現金
- Input 有什麼限制嗎?
Assumption: 只能是debit card
- output 有什麼限制嗎?
Assumption: 只能是20美元的倍數
- Output 會不足嗎?
Assumption: ATM永遠有足夠的餘額 (Bonus: 這裡可以考慮如果不夠的話應該怎麼處理)
- Input 有什麼特點?
Assumption: 一張卡可能有多個賬戶 (Bonus: 這個不太容易想到, 沒想到也沒關係,我們可以先按照一個account來做)
二、Core objects
- Debit Card
- ATM Machine
- Account
三、Use cases
- Take debit card
- Authorization / Log in
- (Optional - 如果一張卡能有多個account就需要這個) Select account
- Check balance
- Deposite money
- Withdraw money
- Log out
四、Classes
1. ATM Machine
- float balance (Optional - 如果ATM機餘額有限制就需要這個)
- Session currentSession ( Tips : 如果一個主體,它的操作<比如check balance / deposite / withdraw>是針對每一個用戶的, 那麼經常會考慮到加入Session這個Class。實踐中如果碰到需要login/logout的主體,經常會用到Session)
- void takeDebitCard (DebitCard card)
- List<Account> login (String passcode)
- void selectAccount (Account account)
- float checkBalance ()
- void depositeMoney (float amount)
- float withDrawMoney (float amount)
- void logOut ()
2. Session
- DebitCard currentDebitCard
- Account currentAccount
3. Account
- float balance
- void depositeMoney (float amount)
- withDrawMoney (float amount)
五、Correctness
1. 增加各式的Exceptions
2. 對於ATM機,有許多種Design pattern可以適用,其中比較合適的就有我們《OOD面向對象專題》課上講過的State Design Pattern, 大家可以自己思考有哪些合適的states。六、總結
ATM Machine作為一道real life object的題目,做法和我們上課講過的解法大同小異,其中值得注意的三點分別是對Session的使用;可能出現各式各樣的Exception; 以及一張卡對應多個
Account的business logic。OOD 面向對象專題講解(免費報名)
1. 什麼是面向對象設計(OOD, Object oriented design)
2. OOD 面試中常見面試題總結、分類
3. 設計模式講解 Design Pattern - Strategy4. 高頻OOD面試題講解 - 電梯設計 Elevator Design
美西 2月11日 周日 10:00-12:00 a.m(北京 2月12日 周日 02:00-06:00 a.m)
報名網址:http://www.jiuzhang.com/course/10/推薦閱讀: