public StartCommand(Car car, ArrayList state)
     : base(car)
 {
     this._car = car;
     CarState = state;
 }
        private static void Main(string[] args)
        {
            Car mycar1 = new Car();
            Console.WriteLine("--------Seperate方式执行效果如下----------");
            Console.WriteLine("请输入下一步操作(str,f,b,stp,u,exit):");
            string CarOperation = Console.ReadLine();
            ArrayList CarState = new ArrayList(); //Record state

            CarSeperateCommand carStart = new StartCommand(mycar1, CarState);
            CarSeperateCommand carMoveForwards = new MoveForwardsCommand(mycar1, CarState);
            CarSeperateCommand carMoveBackwards = new MoveBackwardsCommand(mycar1, CarState);
            CarSeperateCommand carStop = new StopCommand(mycar1, CarState);
            CarSeperateCommand carUndo = new UnDoCommand(mycar1, CarState);
            CarSeperateInvoker carInvoker = new CarSeperateInvoker(carStart, carMoveForwards, carMoveBackwards, carStop, carUndo);

            while (CarOperation != "exit")
            {
                switch (CarOperation.ToLower())
                {
                    case "str": //启动
                        carInvoker.Start();
                        Console.WriteLine("Start Operation:" + mycar1._curStateStr);

                        break;

                    case "f": //前进
                        carInvoker.MoveForwards();
                        Console.WriteLine("MoveForwards Operation:" + mycar1._curStateStr);

                        break;
                    case "b": //后退
                        carInvoker.MoveBackwards();
                        Console.WriteLine("MoveBackwards Operation:" + mycar1._curStateStr);

                        break;
                    case "stp": //停止
                        carInvoker.Stop();
                        Console.WriteLine("Stop Operation:" + mycar1._curStateStr);
                        break;
                    case "u": //回退操作
                        carInvoker.Undo();
                        Console.WriteLine("Undo Operation:" + mycar1._curStateStr);
                        break;

                    default:

                        Console.WriteLine("命令输入错误:");

                        break;
                }

                Console.WriteLine("请输入下一步操作(str,f,b,stp,u,exit):");

                CarOperation = Console.ReadLine();
            }

            Console.ReadLine();
            //Car mycar2 = new Car();
            //CarCombineCommandAll ca = new CarCombineCommandAll(mycar2);

            //Console.WriteLine("--------Combine方式执行效果如下----------");
            //ca.Start();
            //ca.MoveForwards();
            //ca.MoveBackwards();
            //ca.Stop();
            //Console.ReadLine();
        }
 public MoveForwardsCommand(Car car, ArrayList state)
     : base(car)
 {
     this._car = car;
     CarState = state;
 }
 public CarSeperateCommand(Car mycar)
 {
     this._car = mycar;
 }
 public CarCombineCommandAll(Car mycar)
 {
     this._car = mycar;
 }