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

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace CommandSchema
    {
    class Program
    {
    static void Main(string[] args)
    {
    Barbecue boy=new Barbecue();
    
    Command bakeMuttonCommand=new BakeMuttonCommand(boy);
    Command bakeChickenWingCommand=new BakeChickenWingCommand(boy);
    
    Waiter gril=new Waiter();
    gril.SetOrder(bakeMuttonCommand);
    gril.SetOrder(bakeChickenWingCommand);
    
    gril.Notify();
    Console.ReadLine();
    }
    }
    /// <summary>
    /// 烤羊肉串的人
    /// </summary>
    class Barbecue
    {
    public void BakeMutton()
    {
    Console.WriteLine("开始烤羊肉串");
    }
    public void BakeChickenWing()
    {
    Console.WriteLine("开始烤鸡翅膀");
    }
    }
    /// <summary>
    /// 抽象命令
    /// </summary>
    abstract class Command
    {
    protected Barbecue receiver;
    
    protected Command(Barbecue receiver)
    {
    this.receiver = receiver;
    }
    
    abstract public void ExecuteCommand();
    }
    
    class BakeMuttonCommand:Command
    {
    public BakeMuttonCommand(Barbecue receiver) : base(receiver)
    {
    }
    
    public override void ExecuteCommand()
    {
    receiver.BakeMutton();
    }
    }
    
    class BakeChickenWingCommand:Command
    {
    public BakeChickenWingCommand(Barbecue receiver) : base(receiver)
    {
    }
    
    public override void ExecuteCommand()
    {
    receiver.BakeChickenWing();
    }
    }
    /// <summary>
    /// invoker
    /// </summary>
    class Waiter
    {
    private IList<Command> orders=new List<Command>();
    
    public void SetOrder(Command command)
    {
    orders.Add(command);
    Console.WriteLine("增加订单:" + command + " 时间:" + DateTime.Now);
    }
    
    public void CancelOrder(Command command)
    {
    orders.Remove(command);
    Console.WriteLine("取消订单:" + command + " 时间:" + DateTime.Now);
    }
    
    public void Notify()
    {
    foreach (Command command in orders)
    {
    command.ExecuteCommand();
    }
    }
    }
    }
  • 相关阅读:
    中台入门系列1
    微服务 2.0 技术栈选型手册
    mysql计划任务每天定时执行
    更高效地提高redis client多线程操作的并发吞吐设计
    azure之MSSQL服务性能测试
    .NET Socket服务编程之-高效连接接入编
    轻易实现基于linux或win运行的聊天服务端程序
    零配置Socket TCP消息通讯服务容器EC
    azure存储压测的问题(农码主观意识太强被坑了)
    业务逻辑层缓存应该设计
  • 原文地址:https://www.cnblogs.com/i80386/p/2224810.html
Copyright © 2011-2022 走看看