public static void Main(string[] args)
        {
            const string          TRAIN_1               = "train#1";
            const string          TRAIN_2               = "train#2";
            TrainSignal           railwayCrossing1      = new TrainSignal("Crossing#1");
            TrainSignal           railwayCrossing2      = new TrainSignal("Crossing#2");
            Car                   car1                  = new Car(railwayCrossing1, "car1");
            Car                   car2                  = new Car(railwayCrossing1, "car2");
            Car                   car3                  = new Car(railwayCrossing2, "car3");
            RailwayCrossingLogger railwayCrossingLogger = RailwayCrossingLogger.Instance;

            //Incomming Train1 at crossing#1
            railwayCrossing1.OnSignalChanged(INCONMMING, TRAIN_1, railwayCrossingLogger);
            Thread.Sleep(1000);
            //Incomming Train2 at crossing#2
            railwayCrossing2.OnSignalChanged(INCONMMING, TRAIN_2, railwayCrossingLogger);
            Thread.Sleep(3000);
            //Train2 Crossed crossing#2 Clear
            railwayCrossing2.OnSignalChanged(Track_Clear, TRAIN_2, railwayCrossingLogger);
            Thread.Sleep(1000);
            //Train1 Crossed crossing#1 Clear
            railwayCrossing1.OnSignalChanged(Track_Clear, TRAIN_1, railwayCrossingLogger);



            railwayCrossing2.OnSignalChanged(INCONMMING, TRAIN_1, railwayCrossingLogger);
            railwayCrossing2.OnSignalChanged(Track_Clear, TRAIN_1, railwayCrossingLogger);
            car3.Signal = railwayCrossing1;

            Thread.Sleep(1000);
            railwayCrossing1.OnSignalChanged(INCONMMING, TRAIN_2, railwayCrossingLogger);
            Thread.Sleep(3000);
            //Train2 Crossed crossing#1 Clear
            railwayCrossing1.OnSignalChanged(Track_Clear, TRAIN_2, railwayCrossingLogger);

            railwayCrossingLogger.PrintLoggerDetails();
        }
 public Car(TrainSignal signal, string name)
 {
     this._signal          = signal;
     signal.SignalChanged += SignalChanged;
     this._name            = name;
 }