import java.util.ArrayList; public class TransferManager { private ArrayList openTransfers; private int issuedTransfers; private int performedTransfers; public TransferManager() { openTransfers = new ArrayList(); issuedTransfers = 0; performedTransfers = 0; } public void issueTransfer(Account from, Account to, int amount) { openTransfers.add(new Transfer(from, to, amount)); issuedTransfers++; } public void performTransfers() { for(Transfer transaction : openTransfers) { transaction.performTransfer(); performedTransfers++; } openTransfers.clear(); } @Override public String toString() { return "TransferManager (openTransfers: " + openTransfers.size() + "; issuedTransfers: " + issuedTransfers + "; performedTransfers: " + performedTransfers + ")"; } private static class Transfer { private Account from, to; private int amount; public Transfer(Account from, Account to, int amount) { this.from = from; this.to = to; this.amount = amount; } public void performTransfer() { from.transfer(-amount); to.transfer(amount); } } }