• c#设计模式-行为型模式 之 命令模式


    🚀简介

    命令模式是一种数据驱动的设计模式,在命令模式中,请求在对象中作为命令来封装,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把命令直接传给相应的对象,该对象执行命令。使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象 进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。

    👻命令模式包含以下主要角色:
    1. 抽象命令类(Command)角色: 定义命令的接口,声明执行的方法。
    2. 具体命令(Concrete Command)角色:具体的命令,实现命令接口;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
    3. 实现者/接收者(Receiver)角色: 接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。
    4. 调用者/请求者(Invoker)角色: 要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。

    🚀案例

    🐤ICommand接口

    这是命令接口,定义了一个执行操作的方法Execute()

    1. public interface ICommand
    2. {
    3. void Execute();
    4. }

     🐤具体命令角色ConcreteCommand

    实现了ICommand接口。它有一个Receiver对象的引用,并在Execute()方法中调用接收者的Action()方法。

    1. public class ConcreteCommand : ICommand
    2. {
    3. private readonly Receiver _receiver;
    4. public ConcreteCommand(Receiver receiver)
    5. {
    6. _receiver = receiver;
    7. }
    8. public void Execute()
    9. {
    10. _receiver.Action();
    11. }
    12. }

     🐤实现者/接收者(Receiver)角色

    它知道如何执行一个请求相关的操作,这里的操作是输出"执行请求!"。

    1. public class Receiver
    2. {
    3. public void Action()
    4. {
    5. Console.WriteLine("执行请求!");
    6. }
    7. }

    🐤调用者/请求者(Invoker)角色

    它持有一个命令对象,并在某个时间点调用命令对象的Execute()方法。

    1. public class Invoker
    2. {
    3. private ICommand _command;
    4. public void SetCommand(ICommand command)
    5. {
    6. _command = command;
    7. }
    8. public void ExecuteCommand()
    9. {
    10. _command.Execute();
    11. }
    12. }

    🐤测试类

    调用调用者的ExecuteCommand()方法,从而触发接收者的操作

    1. class MyClass
    2. {
    3. public static void Main(string[] args)
    4. {
    5. ICommand command = new ConcreteCommand(new Receiver());
    6. Invoker invoker = new Invoker();
    7. invoker.SetCommand(command);
    8. invoker.ExecuteCommand();
    9. }
    10. }

    🚀优缺点

    优点:
    1. 降低系统的耦合度。命令模式能将调用操作的对象与实现该操作的对象解耦。
    2. 增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,它满足开闭原则对扩展比较灵活。
    3. 可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。
    4. 方便实现 Undo Redo 操作。命令模式可以与后面介绍的备忘录模式结合,实现命令的撤销与恢复。
    缺点:
    1. 使用命令模式可能会导致某些系统有过多的具体命令类。
    2. 系统结构更加复杂。
    使用场景
    • 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
    • 系统需要在不同的时间指定请求、将请求排队和执行请求。
    • 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作
  • 相关阅读:
    数据库设计之E-R图和关系表
    12-Go语言接口interface
    Android辅助功能(Accessibility)简介
    上市公司员工及工资数据(2000-2022年)
    Telegram 引入了国产小程序容器技术
    程序员的刻板印象,都是真的吗?
    基于Zookeeper实现的分布式可重入锁
    自动驾驶和辅助驾驶系统的概念性架构(一)
    PyTorch 模型性能分析和优化 - 第 6 部分
    深入理解Redis:工程师的使用指南
  • 原文地址:https://blog.csdn.net/weixin_65243968/article/details/133554895