public IStateExecutor GetStreamReaderStateExecutor(CalculatorStreamReaderState calculatorStreamReaderState) { switch (calculatorStreamReaderState) { case CalculatorStreamReaderState.ReadDigit: return(new ReadDigitStateExecutor(_scInputManager)); case CalculatorStreamReaderState.ReadOperation: return(new ReadOperationStateExecutor(_scInputManager)); default: throw new NotSupportedException(); } }
public string ReadKey(ConsoleKeyInfo key) { var stateExecutor = _stateExecutorFactory.GetStreamReaderStateExecutor(_calculatorStreamReaderState); var consoleKey = key.Key; var keyChar = key.KeyChar; IStateExecutorResult stateExecutorResult; switch (consoleKey) { case ConsoleKey.Backspace: stateExecutorResult = stateExecutor.RemoveChar(); break; case ConsoleKey.Enter: stateExecutorResult = stateExecutor.CalculateResult(); break; case ConsoleKey.Add: case ConsoleKey.OemPlus: stateExecutorResult = keyChar == '=' ? stateExecutor.CalculateResult() : stateExecutor.SetOperation(SCBinOperation.Add, keyChar); break; case ConsoleKey.Subtract: case ConsoleKey.OemMinus: stateExecutorResult = stateExecutor.SetOperation(SCBinOperation.Subtract, keyChar); break; default: stateExecutorResult = stateExecutor.AddChar(keyChar); break; } if (stateExecutorResult.ErrorMessage != null) { Reset(); return($"\n\nОшибка! {stateExecutorResult.ErrorMessage}\n\n"); } _calculatorStreamReaderState = stateExecutorResult.NextState; return(stateExecutorResult.ConsoleResult); }
protected BaseStateExecutor(ISCInputManager scInputManager, CalculatorStreamReaderState currentState) { _scInputManager = scInputManager; CurrentState = currentState; }
private void Reset() { _calculatorStreamReaderState = CalculatorStreamReaderState.ReadDigit; }