protected GateState(Gate gate)
 {
     this.gate = gate ?? throw new ArgumentNullException(nameof(gate));
 }
 public OpenGateState(Gate gate) : base(gate)
 {
 }
 public CloseGateState(Gate gate) : base(gate)
 {
 }