using System; namespace DesignPatterns.State { internal class ProcessingTransactionState : IState { public ProcessingTransactionState( IPosTerminal terminal ) { _terminal = terminal; } public void ProcessTransaction( ) { if ( (++_counter % 5) == 0 ) { _terminal.CurrentState = new TransactionRejectedState( _terminal ); } else { _terminal.CurrentState = new TransactionApprovedState( _terminal ); } } public void PrintReceipt( ) { Console.Out.WriteLine( "The transaction needs to be processed first" ); } public void SwipeCard( string cardNumber ) { Console.Out.WriteLine( "You have already swiped a card" ); } public void EnterAmount( double amount ) { Console.Out.WriteLine( "You have already entered an amount" ); } public void EnterPin( string pin ) { Console.Out.WriteLine( "You have already entered a PIN" ); } private readonly IPosTerminal _terminal; private static int _counter; } }