State / Concurrency• Patterns: State, Chain of Responsibility
ATM Machine
Hard
Problem Summary
Design an ATM controller that processes cards, verifies security PINs, updates accounts, and dispenses cash.
Functional Scope
- ATM transitions: Idle -> HasCard -> PinEntered -> Dispensing -> TransactionComplete.
- Support multiple currency denominations ($10, $20, $50, $100).
- Implement ATM cash limits and roll back transactions if dispenser fails.
Entity-Relationship (ER) Schema
ATM [1] <---> [1] ATMState ATM [1] <---> [1] CashDispenser CashDispenser [1] <---> [0..1] CashDispenser (Next Chain)
Design Approach
Combine the State pattern (for card handling steps) with Chain of Responsibility (for resolving cash dispensing counts of bills).
Core Classes & Models
ATM (Main context class)ATMState (State interfaces)CashDispenser (Base link handler in Chain of Responsibility)
Code Blueprint
public abstract class CashDispenser {
protected CashDispenser nextDispenser;
public abstract void dispense(double amount);
}