/* * ATM Example system - file CashDispenser.java * * copyright (c) 2001 - Russell C. Bjork * */ package atm.physical;import banking.Money;import simulation.Simulation;/** Manager for the ATM's cash dispenser.  In a real ATM, this would  *  manage a physical device; in this simulation,  it uses classes  *  in package simulation to simulate the device. */ public class CashDispenser{    /** Constructor     *     *  @param log the log in which to record dispensing cash     */    public CashDispenser(Log log)    {        this.log = log;                cashOnHand = new Money(0);    }        /** Set the amount of cash initially on hand      *     *  @param initialCash the amount of money in the dispenser     */    public void setInitialCash(Money initialCash)    {        cashOnHand = initialCash;    }        /** See if there is enough cash on hand to satisfy a request     *     *  @param amount the amount of cash the customer wants     *  @return true if at least this amount of money is available     */    public boolean checkCashOnHand(Money amount)    {        return amount.lessEqual(cashOnHand);    }        /** Dispense cash to a customer     *     *  @param amount the amount of cash to dispense     *     *  Precondition: amount is <= cash on hand     */    public void dispenseCash(Money amount)    {        cashOnHand.subtract(amount);                Simulation.getInstance().dispenseCash(amount);                // Log cash having been dispensed                log.logCashDispensed(amount);    }    /** Log into which cash amounts dispensed will be recorded     */     private Log log;        /** Current cash on hand     */    private Money cashOnHand;}