예제 #1
0
        static void Main(string[] args)
        {
            Receiver      receiver      = new Receiver();
            AddCommand    addCommand    = new AddCommand(receiver);
            RemoveCommand removeCommand = new RemoveCommand(receiver);
            SaveCommand   saveCommand   = new SaveCommand(receiver);
            Invoker       invoker       = new Invoker();

            invoker.SetCommand(addCommand);
            invoker.ExecuteCommand();
            invoker.SetCommand(removeCommand);
            invoker.ExecuteCommand();
            invoker.SetCommand(saveCommand);
            invoker.ExecuteCommand();

            // int[,] array = new int[5, 10];
            // Console.WriteLine(string.Format("array的行:" + array.GetLength(0)));
            // Console.WriteLine(string.Format("array的列:" + array.GetLength(1)));
            // Console.WriteLine(string.Format("array的元素个数:" + array.Length));

            //BaseClass baseClass = new ClassA();
            //baseClass.Fun1();

            //BaseClass baseClass1 = new ClassB();
            //baseClass1.Fun1();
        }
예제 #2
0
        static void Main(string[] args)
        {
            Soliders soliders         = new Soliders();
            Command  combinateCommand = new CombinateCommand(soliders);
            Command  fightCommand     = new FightCommand(soliders);
            Command  cableBoatCommand = new CableBoatCommand(soliders);

            //设置传令官
            Herald herald = new Herald();

            //集合
            herald.SetCommand(combinateCommand);
            //herald.Notify();

            //战斗
            herald.SetCommand(fightCommand);
            herald.SetCommand(fightCommand);
            // herald.Notify();

            //铁索连舟
            herald.SetCommand(cableBoatCommand);
            //herald.Notify();
            herald.Notify();
            Console.WriteLine("取消命令!");
            herald.CancelCommand(cableBoatCommand);
            herald.Notify();

            Reciver    reciver = new Reciver();
            AbsCommand command = new ConcreteCommand(reciver);
            Invoker    invoker = new Invoker();

            invoker.SetCommand(command);
            invoker.ExecuteCommand();
        }
예제 #3
0
        static void Main(string[] args)
        {
            Console.WriteLine("Enter First Value");
            int a = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Enter Second Value");
            int b = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Enter Commands for Calculator: Type 1 for Addition and 2 for substraction");
            string command = Console.ReadLine();

            Invoker    invoker          = new Invoker();
            Calculator calculator       = new Calculator(a, b);
            Add        addCommand       = new Add(calculator);
            Subtract   substractCommand = new Subtract(calculator);

            if (command == "1")
            {
                Console.WriteLine("Add Command is selected and the Result is {0}", invoker.ExecuteCommand(addCommand));
            }
            else if (command == "2")
            {
                Console.WriteLine("Substract Command is selected and the Result is {0}", invoker.ExecuteCommand(substractCommand));
            }
            else
            {
                Console.WriteLine("You have entered wrong command. Please type Command '1' for addition or '2' for substraction");
            }

            Console.ReadLine();
        }
예제 #4
0
        static void Main(string[] args)
        {
            Receiver r = new Receiver();
            Command  c = new ConcreteCommand(r);
            Invoker  i = new Invoker();

            i.SetCommand(c);
            i.ExecuteCommand();

            /*
             * //开店前的准备
             * Barbecuer boy = new Barbecuer();
             * Command bakeMuttonCommand1 = new BakeMuttonCommand(boy);
             * Command bakeMuttonCommand2 = new BakeMuttonCommand(boy);
             * Command bakeChickenWingCommand1 = new BakeChickenWingCommand(boy);
             * Waiter girl = new Waiter();
             *
             * //开门营业 顾客点菜
             * girl.SetOrder(bakeMuttonCommand1);
             * girl.SetOrder(bakeMuttonCommand2);
             * girl.SetOrder(bakeChickenWingCommand1);
             *
             * //点菜完闭,通知厨房
             * girl.Notify();
             */
            Console.Read();
        }
예제 #5
0
        public static void Main(string[] args)
        {
            #region Prototype

            var receiver = new Receiver();
            var command  = new ConcreteCommand(receiver);
            var invoker  = new Invoker();
            invoker.SetCommand(command);
            invoker.ExecuteCommand();

            #endregion Prototype

            var barbecuer = new Barbecuer();
            var waiter    = new Waiter();

            waiter.SetOrder(new BakeChickenWingCommand(barbecuer));
            waiter.SetOrder(new BakeMuttonCommand(barbecuer));
            waiter.SetOrder(new BakeMuttonCommand(barbecuer));

            var willCancelOrder = new BakeMuttonCommand(barbecuer);
            waiter.SetOrder(willCancelOrder);
            waiter.CancelOrder(willCancelOrder);

            waiter.Notify();

            Console.ReadLine();
        }
예제 #6
0
        static void Main(string[] args)
        {
            Receiver receiver = new Receiver();
            Command  command  = new ConcreteCommand(receiver);
            Invoker  invoker  = new Invoker();

            invoker.SetCommand(command);
            invoker.ExecuteCommand();
            Console.ReadKey();
        }
예제 #7
0
        static void Main(string[] args)
        {
            // Create receiver, command, and invoker
            Receiver receiver = new Receiver();
            Command command = new ConcreteCommand(receiver);
            Invoker invoker = new Invoker();

            // Set and execute command
            invoker.SetCommand(command);
            invoker.ExecuteCommand();

            // Wait for user
            Console.Read();
        }
예제 #8
0
        static void Main(string[] args)
        {
            // Create receiver, command and invoker
            Receiver receiver = new Receiver();
            Command  command  = new ConcreteCommand(receiver);
            Invoker  invoker  = new Invoker();

            //Set and execute command
            invoker.SetCommand(command);
            invoker.ExecuteCommand();


            Console.ReadKey();
        }
예제 #9
0
        /// <summary>
        /// 命令模式:
        /// 一般来说,我们会给指定对象发送命令,然后指定对象去执行命令,比如妈妈让你洗碗(妈妈给你发命令:洗碗)
        /// 这样会导致耦合性很高,很难扩展
        ///
        /// 使用命令模式,可以降低耦合
        /// 我们需要给指定对象发送命令,不会直接去命令那个对象,而是会通过一个中间对象来把命令传递过去
        /// 这样就降低了耦合性,增加了系统的可扩展性
        ///
        /// 例如:
        /// 在部队里,团长下命令集合,不可能去给每一个士兵说集合,不现实
        /// 这时团长把一连,二连,三连连长都叫过来,说集合
        /// 接下来三个连长去将自己连的士兵集合起来就可以了(具体要说连下面有排,排下面有班,那也是命令,这里不细说)
        ///
        /// 所以,此时
        /// 团长是发送命令者
        /// 士兵是执行命令者
        /// 连长是传达命令者
        /// 这样团长和士兵之间基本是没有什么耦合的
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //初始化执行命令者
            var receiver = new Receiver();
            //初始化团长命令:将命令执行者传递进去(该命令是命令谁的)
            var command = new RegimentalCommand(receiver);
            //初始化中间者:传递参数(将命令交给他)
            var invoker = new Invoker(command);

            //中间者去传递命令,然后命令接收者去执行命令
            invoker.ExecuteCommand();

            Console.WriteLine("End");
            Console.ReadKey();
        }
예제 #10
0
        static void Main(string[] args)
        {
            //Receiver 實作實際執行動作
            Receiver receiver = new Receiver();
            //ConcreateCommand 將Receiver與Action綁定成一個通知命令
            Command command1 = new ConcreateCommand1(receiver);
            Command command2 = new ConcreateCommand2(receiver);
            //透過 Invoker 設定要執行的命令與通知Receiver執行命令
            Invoker invoker = new Invoker();

            invoker.SetCommand(command1);
            // invoker.ExecuteCommand();

            invoker.SetCommand(command2);
            invoker.ExecuteCommand();
        }