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.可能会导致系统有过多的具体命令类。

  • 相关阅读:
    CodeIgniter 2.X 于 PHP5.6 兼容错误
    解决 TextMate 2 无法安装 Emmet 插件
    Windows 10 KMS 激活方法
    Sublime Text 3 如何修改默认快捷键
    Grunt快速使用笔记
    CSS3字体发光效果
    CSS3使用盒模型实现三栏布局
    CSS3Transition添加多个过渡效果
    Javascript 判断网页横竖屏
    【iOS知识汇】OC点语法的坑
  • 原文地址:https://www.cnblogs.com/shadoll/p/14355637.html
Copyright © 2011-2022 走看看