• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

04月
29
C#
设计模式

设计模式-命令模式

发表于 2022-04-29 • 字数统计 1727 • 被 1,664 人看爆

定义

将一个请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。

命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。

举例

如:开关与电灯、排气扇等无直接关系,可以用控制电灯,也可以用来控制排气扇等控制

结构

命令模式结构图.png

实现

//用来声明执行操作的接口。
abstract class Command
{
    protected Receiver receiver;
    public Command(Receiver receiver)
    {
        this.receiver = receiver;
    }
    abstract public void Execute();
}

//ConcreteCommand类,将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现Execute。
class ConcreteCommand : Command
{
    public ConcreteCommand(Receiver receiver) : base(receiver)
    {}


    public override void Execute()
    {
        receiver.Action();
    }
}

//要求该命令执行这个请求。
class Invoker
{
    private Command command;
    public void SetCommand(Command command)
    {
        this.command = command;
    }

    public void ExecuteCommand()
    {
        command.Execute();
    }

}

//知道如何实施与执行一个与请求相关的操作,任何类都可能作为一个接收者。
class Receiver
{
    public void Action()
    {
        Console.WriteLine("执行请求!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Receiver r = new Receiver();
        Command c = new ConcreteCommand(r);
        Invoker i = new Invoker();
        i.SetCommand(c);
        i.ExecuteCommand();
    }
}

优点

  • (1)命令模式降低了系统的耦合度。
  • (2)通过使用命令模式,新的命令可以很容易地加入到系统中。
  • (3)使用命令模式可以比较容易地设计一个命令队列或宏命令(组合命令)。
  • (4)命令模式为请求的撤销(Undo)和恢复(Redo)操作提供了一种设计和实现方案。

优点

使用命令模式可能会导致某些系统有过多的具体命令类。

适用环境

  • (1)系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
  • (2)系统需要在不同的时间指定请求,将请求排队和执行请求。
  • (3)系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
  • (4)系统需要将一组操作组合在一起形成宏命令。
分享到:
设计模式-解释器模式
设计模式-职责链模式
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,080次看爆
  • JAVA_HOME环境配置问题 3,730次看爆
  • AssetBundle使用 3,499次看爆
  • VSCode配置C++开发环境 3,257次看爆
  • Lua反射 3,133次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图