public ICustomerInformationCollector SelectBuiltInProgram(ProgramType type)
        {
            IWashProgram program = _programFactory.Create(type);

            _motherboard.Transmit(new WashProgramSelectedSignal(program));

            return(this);
        }
 public void TransitionState(IWashTunnelState state)
 {
     _state = state;
     if (state is FreeState)
     {
         _motherboard.Transmit(new VehicleReadySignal());
     }
 }
        public void Wash(IVehicle vehicle, IWashProgram program)
        {
            if (!_sensor.IsDirty(vehicle))
            {
                _motherboard.Transmit(new VehicleAlreadyCleanSignal());
                return;
            }

            _washTunnel.Wash(vehicle, program);
        }