首页 > 其他分享 >22_命令模式

22_命令模式

时间:2024-03-15 12:33:07浏览次数:11  
标签:22 void 执行者 模式 命令 IReceiver receiver public

命令模式是一种行为设计模式,它将请求封装成一个对象,从而使不同的请求可以参数化其他对象,或者在不同的时间进行调用和执行。在这种模式中,命令对象充当中介者,负责将请求者和执行者进行解耦。

命令模式包含以下几个角色:

  1. 命令接口(Command Interface):定义了命令对象的执行方法。

  2. 具体命令(Concrete Command):实现了命令接口,包含了具体的执行逻辑。

  3. 请求者(Invoker):负责调用命令对象执行请求。

  4. 执行者(Receiver):负责执行具体的命令逻辑。

命令模式的工作流程如下:

  1. 创建具体命令对象,并指定其关联的执行者。

  2. 将具体命令对象传递给请求者。

  3. 请求者调用具体命令对象的执行方法。

  4. 具体命令对象将请求传递给执行者,并执行相应的逻辑。

命令模式的优点包括:

  1. 解耦请求者和执行者,使得系统更加灵活和可扩展。

  2. 可以方便地实现撤销、重做等操作。

  3. 可以实现命令的排队、记录和回放等功能。

命令模式适用于以下情况:

  1. 需要将请求封装成对象,并且需要在不同的时间进行调用和执行。

  2. 需要支持撤销、重做等操作。

  3. 需要将请求的发送者和执行者解耦,使得系统更加灵活。

总之,命令模式是一种将请求封装成对象的设计模式,它能够实现请求和执行者之间的解耦,并提供了一些额外的功能,如撤销、重做等。

 

IReceiver

/// <summary>
    /// 执行者
    /// </summary>
    public interface IReceiver
    {
        /// <summary>
        /// 上任
        /// </summary>
        void Start();
        /// <summary>
        /// 回城
        /// </summary>
        void Return();
    }

 

 

Command Interface

/// <summary>
    /// 命令抽象类
    /// </summary>
    public abstract class CommandBase
    {
        protected IReceiver receiver;
        public CommandBase(IReceiver receiver)
        {
            this.receiver = receiver;
        }

        /// <summary>
        /// 执行
        /// </summary>
        public abstract void Execute();

    }

 

 

 Receiver

/// <summary>
    /// 将军
    /// </summary>
    public class General : IReceiver
    {
        public void Return()
        {
            Console.WriteLine("回京复命.......");
        }

        public void Start()
        {
            Console.WriteLine("他乡赴任官职.....");
        }
    }

 

 

 Concrete Command

/// <summary>
    /// 第一道诏书,任职诏书
    /// </summary>
    public class OfferCommand : CommandBase
    {
        public OfferCommand(IReceiver receiver) : base(receiver)
        {
        }

        public override void Execute()
        {
            receiver.Start();
        }
    }
/// <summary>
    /// 第二道诏书,回城诏书
    /// </summary>
    public class ReturnCommand : CommandBase
    {
        public ReturnCommand(IReceiver receiver) : base(receiver)
        {
        }

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

 

 Invoker

/// <summary>
    /// 请求者-宦官
    /// </summary>
    public class Invoker
    {
        private CommandBase command;

        public void SetCommand(CommandBase command)
        { 
            this.command = command;
        }

        /// <summary>
        /// 宣读生旨
        /// </summary>
        public void Reading()
        {
            command.Execute();
        }
    }

 

 Client

/// <summary>
    /// 皇帝
    /// </summary>
    public  class Client
    {
        public void Start()
        {
            IReceiver receiver = new General();//执行者
            Invoker invoker = new Invoker();//请求者

            //赴任圣旨
            CommandBase command1 = new OfferCommand(receiver);
            invoker.SetCommand(command1);
            invoker.Reading();

            Console.WriteLine("N年后...........");

            //回城复命圣旨
            CommandBase command2 = new ReturnCommand(receiver);
            invoker.SetCommand(command2);
            invoker.Reading();
        }
    }

调用

static void Main(string[] args)
        {
            new Client().Start();
            Console.ReadKey();
            Console.WriteLine("Hello, World!");
        }

 

标签:22,void,执行者,模式,命令,IReceiver,receiver,public
From: https://www.cnblogs.com/MingQiu/p/18075152

相关文章

  • fastadmin命令行模式--command
    1.引入命令行文件fastadmin/application/command.php 2.在该位置新建执行文件此处以menu作说明protectedfunctionconfigure(){$this->setName('命令')->addOption('参数1','参数简称',Option::VALUE_REQUIRED(必填),'参数说明',默认值......
  • Spring IOC与工厂模式
    1.简单介绍在讲SpringIOC之前,有必要先来聊一下工厂模式(FactoryPattern)。工厂模式可将Java对象的调用者从被调用者的实现逻辑中分离出来。工厂模式是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象......
  • 21_迭代器模式
    迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不需要暴露集合对象的内部结构。迭代器模式将遍历操作封装在迭代器对象中,使得客户端可以通过迭代器对象依次访问集合中的元素。迭代器模式有三个主要角色:迭代器(Iterator):定义了访问和遍历集合对......
  • 代码随想录算法训练营第十天| 232. 用栈实现队列 225. 用队列实现栈
    232.用栈实现队列https://leetcode.cn/problems/implement-queue-using-stacks/description/classMyQueue{Stack<Integer>stackIn;Stack<Integer>stackOut;publicMyQueue(){stackIn=newStack<>();stackOut=new......
  • 七、策略模式
    在深入理解Spring声明式事务时其框架涉及到该种模式的应用。策略模式的目的就是解决繁琐的ifelse判断,如下:     ......
  • redis主从+哨兵模式
    什么是哨兵模式Redis哨兵模式是一种用于确保Redis高可用性的解决方案。通过运行独立的哨兵进程,它能监控主服务器和从服务器的状态,并在主服务器故障时自动执行故障转移操作,将一个从服务器晋升为新的主服务器,从而保障系统的持续可用性。哨兵模式工作原理;监控主从服务器:在Re......
  • OpenCV 配置 VS 2022并识别人脸框出
    文章目录前言一、什么是OpenCV?二、OpenCV的安装和配置1.OpenCV下载2.安装3.配置环境变量4.vs2022环境配置三、OpenCV识别图片人脸四、总结前言在计算机视觉领域,人脸识别是一项具有挑战性且备受关注的任务。借助于开源的计算机视觉库OpenCV,我们可以轻松实现人脸......
  • 单例模式与原型模式的深度探索之旅
    ​......
  • Java中实现单例(Singleton)模式的八种方式
    单例模式定义单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。基本的实现思路单例模式要求类能够有返回对象一个引用(永远是同一个)和一个获得该实......
  • 掌握 Kubernetes 故障排除技巧:kubectl命令的基本指南
    Kubernetes彻底改变了容器编排,简化了应用程序的管理和扩展。然而,与任何复杂系统一样,Kubernetes集群也会遇到问题,需要及时解决才能保持最佳性能和可靠性。在本文中,我们将深入探讨必要的kubectl命令,这些命令是诊断和排除Kubernetes集群问题不可或缺的工具。无论您是新手还是经......