zoukankan      html  css  js  c++  java
  • C# 设计模式-命令模式

    一.介绍  

      命令模式(Command Pattern)。属于行为型模式。它将请求封装成一个对象,从而使你可以用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

    二.实现

      举个例子,老板想做一个系统,那老板的话就相当于一个命令,而这个命令又不可能直接说给员工(老板一般都是神龙见首不见尾,不直接跟员工发号施令),这就需要让经理去发出命令,并且监督员工执行该命令。这个场景下,老板的话就是命令Command,经理是请求者Invoker,员工是接受者Receiver。

    //命令Command
    public abstract class Boss
    {
        public abstract void Execute();
    }
    
    //接受者Receiver
    public class Staff
    {
        public void Action()
        {
            Console.WriteLine("干活");
        }
    }
    
    //请求者Invoker
    public class Manager
    {
        private Boss boss;
    
        public void SetCommand(Boss boss)
        {
            this.boss = boss;
        }
    
        public void ExecuteCommand(string client)
        {
            Console.WriteLine(client);
            Console.WriteLine("延迟5秒执行");
            boss.Execute();
        }
    }
    
    //具体命令Command
    public class BossA : Boss
    {
        private Staff staff;
        public BossA(Staff staff)
        {
            this.staff = staff;
        }
        public override void Execute()
        {
            staff.Action();
        }
    }
    
    //具体命令Command
    public class BossB : Boss
    {
        private Staff staff;
        public BossB(Staff staff)
        {
            this.staff = staff;
        }
        public override void Execute()
        {
            staff.Action();
        }
    }
    
    //调用
    public static void Main(string[] args)
    {
        Manager manager = new Manager();
        manager.SetCommand(new BossA(new Staff()));
        manager.ExecuteCommand("做老板A的项目");
        manager.SetCommand(new BossB(new Staff()));
        manager.ExecuteCommand("做老板B的项目");
    }

      这个例子较为简单,想做可以设置多个命令的操作,将命令改为集合,并对其做删改操作就行。

    三.总结

      优点:

      1.使得新的命令很容易加入到系统中。

      2.可以设计一个命令队列来实现对请求的 Updo 和 Redo 操作。

      3.可以较容易地将命令写入日志。

      4.可以将命令对象聚合起来,合成命令。

      缺点:

      1.可能会导致系统有过多的具体命令类。

  • 相关阅读:
    【Web技术】561- 网站性能优化之度量篇
    【拓展】什么是Deno?跟Node.js有何区别?
    【Web技术】560- 一个简洁、有趣的无限下拉方案
    【Web技术】559- 一文带你彻底搞懂跨域
    【TS】558- 5000 多字,让你一文掌握 TS 枚举
    【拓展】你真的会写 Markdown 么?
    【调试】557- 11 个Chrome骚技巧让你为所欲为
    ios 地图
    ios 7 20像素解决
    保存图片到相册
  • 原文地址:https://www.cnblogs.com/shadoll/p/14355637.html
Copyright © 2011-2022 走看看