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

 

posted @ 2021-02-01 18:00  shine声  阅读(188)  评论(0编辑  收藏  举报