zoukankan      html  css  js  c++  java
  • 命令模式

    命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
    命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开,实现二者之间的松耦合。

    代码1:命令接收者

      //烤肉串者
        public class Barbecuer
        {
            public void BakeMutton()
            {
                Console.WriteLine("烤羊肉串!");
            }
    
            public void BakeChickenWing()
            {
                Console.WriteLine("烤鸡翅!");
            }
        }
    

    代码2:命令族

    //抽象命令
        public abstract class Command
        {
            protected Barbecuer receiver;
    
            public Command(Barbecuer receiver)
            {
                this.receiver = receiver;
            }
    
            //执行命令
            abstract public void ExcuteCommand();
        }
    
        //烤羊肉串命令
        class BakeMuttonCommand : Command
        {
            public BakeMuttonCommand(Barbecuer receiver)
                : base(receiver)
            { }
    
            public override void ExcuteCommand()
            {
                receiver.BakeMutton();
            }
        }
    
        //烤鸡翅命令
        class BakeChickenWingCommand : Command
        {
            public BakeChickenWingCommand(Barbecuer receiver)
                : base(receiver)
            { }
    
            public override void ExcuteCommand()
            {
                receiver.BakeChickenWing();
            }
        }
    

    代码3:命令发起者

    //服务员
        public class Waiter
        {
            private IList<Command> orders = new List<Command>();
    
            //设置订单
            public void SetOrder(Command command)
            {
                if (command.ToString() == "命令模式.BakeChickenWingCommand")
                {
                    Console.WriteLine("服务员:鸡翅没有了,请点别的烧烤。");
                }
                else
                {
                    orders.Add(command);
                    Console.WriteLine("增加订单:" + command.ToString() + "  时间:" + DateTime.Now.ToString());
                }
            }
    
            //取消订单
            public void CancelOrder(Command command)
            {
                orders.Remove(command);
                Console.WriteLine("取消订单:" + command.ToString() + "  时间:" + DateTime.Now.ToString());
            }
    
            //通知全部执行
            public void Notify()
            {
                foreach (Command cmd in orders)
                {
                    cmd.ExcuteCommand();
                }
            }
        }
    

    代码4:客户端代码

     class Program
        {
            static void Main(string[] args)
            {
                //开店前的准备
                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();
    
            }
        }
    

      

  • 相关阅读:
    css去掉点击连接时所产生的虚线边框技巧兼容符合w3c标准的浏览器
    html中<a href> </a>的用法
    点击页面其他地方关闭弹出层
    CSS文字两端对齐
    mouseover和mouseenter的区别
    jquery中的$("#id")与document.getElementById("id")的区别
    console.log
    ie6中margin失效问题
    渐变
    CSS 清除浮动的4种方法
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/3361453.html
Copyright © 2011-2022 走看看