OOD 高頻面試題 | 如何設計一個ATM

原文地址:如何設計一個 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 - Strategy

4. 高頻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/

推薦閱讀:

IM系統設計

TAG:面向對象編程 | 面向對象分析與設計 | 系統設計 |