首页 > 其他分享 >CommandPattern-命令模式

CommandPattern-命令模式

时间:2023-08-22 10:55:04浏览次数:34  
标签:ICommand light void 模式 命令 Light CommandPattern public

在C#中,命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,这样可以让请求的发送者和接收者解耦,并且可以对请求进行参数化、队列化、记录日志、撤销等操作。

命令模式有以下几个关键角色:

Command(命令):定义了执行操作的接口,通常包括一个执行方法。

ConcreteCommand(具体命令):实现了Command接口,具体定义了执行操作的方法。

Receiver(接收者):定义了操作的执行者,接收到具体命令后执行相应的操作。

Invoker(调用者):调用命令执行操作,可以持有一个命令对象或命令对象的集合。

下面是一个示例,展示如何在C#中使用命令模式来实现一个简单的遥控器控制电灯的功能:

namespace CommandPattern_命令模式
{
    public class Command
    {
        // Command
        public interface ICommand
        {
            void Execute();
        }
        // ConcreteCommand
        public class LightOnCommand : ICommand
        {
            private readonly Light _light;

            public LightOnCommand(Light light)
            {
                _light = light;
            }

            public void Execute()
            {
                _light.TurnOn();
            }
        }
        public class LightOffCommand : ICommand
        {
            private readonly Light _light;

            public LightOffCommand(Light light)
            {
                _light = light;
            }

            public void Execute()
            {
                _light.TurnOff();
            }
        }
        // Receiver
        public class Light
        {
            public void TurnOn()
            {
                Console.WriteLine("The light is on");
            }

            public void TurnOff()
            {
                Console.WriteLine("The light is off");
            }
        }
        // Invoker
        public class RemoteControl
        {
            private readonly ICommand _onCommand;
            private readonly ICommand _offCommand;

            public RemoteControl(ICommand onCommand, ICommand offCommand)
            {
                _onCommand = onCommand;
                _offCommand = offCommand;
            }

            public void TurnOnLight()
            {
                _onCommand.Execute();
            }

            public void TurnOffLight()
            {
                _offCommand.Execute();
            }
        }
    }
}
namespace CommandPattern_命令模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Light light = new Light();
            ICommand onCommand = new LightOnCommand(light);
            ICommand offCommand = new LightOffCommand(light);

            RemoteControl remoteControl = new RemoteControl(onCommand, offCommand);
            remoteControl.TurnOnLight();
            remoteControl.TurnOffLight();

            //输出结果
            //The light is on
            //The light is off
            Console.Read();
        }
    }
}

在上述示例中,使用命令模式实现了一个遥控器控制电灯的功能。ICommand是命令接口,定义了执行操作的方法。具体命令(LightOnCommand和LightOffCommand)实现了ICommand接口,分别定义了打开灯和关闭灯的操作。接收者(Light)是真正执行命令的对象。调用者(RemoteControl)持有命令对象,并通过调用命令对象的执行方法来执行相应的操作。

在Client中,首先创建一个Light对象,并创建所需的具体命令和调用者对象。然后调用调用者的相关方法来执行相应的操作。

通过使用命令模式,可以将请求发送者和接收者解耦,发送者只需要知道如何调用命令对象,而不需要知道如何执行实际操作。同时,命令模式还支持对请求进行参数化、队列化、记录日志、撤销等操作。这使得系统更加灵活和可扩展,可以支持各种不同的操作和请求的处理。

标签:ICommand,light,void,模式,命令,Light,CommandPattern,public
From: https://www.cnblogs.com/ZHIZRL/p/17647977.html

相关文章

  • docker常用命令
    镜像基础命令:dockerversion          查看docker版本dockersearch--automated-s3nginx   按星级搜索镜像dockerpullubuntu:14.04       获取镜像dockerimages          查看镜像信息dockerinspect  ......
  • LVS负载均衡之NAT模式构建
    ※实验环境(1)系统:centos7.9(2)虚拟机:4台centos7.9,1台作为nfs共享服务器( NFS共享服务搭建步骤)为了保证源目标的一致性,采用源nat转换,将客户端发送的请求在负载调度器上经过转换后再发送到真实服务器。一、负载调度器配置(1)根据拓扑图配置IP地址(略)(2)安装ipvsadmyuminstallipvsadm-y......
  • 一行命令即可启动 Walrus丨入门教程
    应用管理平台Walrus已正式开源,本文将介绍如何上手安装Walrus以及如何借助Walrus进行应用部署。 ⭐开源地址:https://github.com/seal-io/walrus 部署Walrus首先,您需要准备:资源不少于4CPU,8Gi内存的Linux服务器。至少50GB的空余磁盘空间。安装Docker服务......
  • ChainOfResponsibilityPattern-责任链模式
    在C#中,责任链模式(ChainofResponsibilityPattern)是一种行为型设计模式,它可让多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。请求沿着一个链传递,直到有一个对象处理它为止。责任链模式有以下几个关键角色:Handler(处理器):定义处理请求的接口,并通常持有一......
  • TemplateMethodPattern-模板方法模式
    在C#中,模板方法模式(TemplateMethodPattern)是一种行为型设计模式,它定义了一个算法的骨架,将某些步骤延迟到子类中实现。模板方法模式通过将公共的算法步骤抽象到基类中,并且通过在基类中定义一个模板方法来调用这些步骤,从而实现代码的复用和灵活性。模板方法模式有以下几个关键角......
  • Git常用命令
    Git不知道小伙伴们都接触过没,今天闲着没事我就来给大家讲讲Git这个分布式版本控制系统的一些常用操作命令。在讲操作命令之前,可能会有小伙伴会问,Git是什么啊,可能有的小伙伴还没有了解过,下面我先来给大家聊聊Git的概念。Git概念:Git是一个开源的分布式版本控制系统,用于敏捷高......
  • 字符设备驱动-13.ioctl命令详解
    1引入ioctl一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能增添命令,通常以增设ioctl()命令的方式实现。对于ioctl这个系统调用接口,Linux的创始人在2.0版本之前并没有进行添加,仅有write和read两个接口,但是后来发现当需要......
  • 设计模式和七大原则概述及单一职责原则详解
    设计模式的目的编写软件过程中,程序员面临着来自,耦合性,内聚性以及可维护性,扩展性,重用性等方面的挑战。设计模式是为了让程序,具有更好的1.代码重用性(相同代码,不用重复编写)2.可读性(编程规范性,便于其他程序员的阅读和理解)3.可扩展性(当需要增加新的功能时,非常的方便)4.可靠......
  • InterpreterPattern-解释器模式
    在C#中,解释器模式(InterpreterPattern)是一种行为型设计模式,它定义了一种语言和解释器之间的关系,使得用户可以使用特定的语法解释表达式或操作。解释器模式有以下几个关键角色:AbstractExpression(抽象表达式):定义了解释器的抽象方法,所有具体表达式的共同父类。在C#中,可以使用抽象类......
  • c2工具sliver 执行木马命令后会弹窗一闪而过
    向木马发出指令后,如果是cmd命令会有一个黑窗口一闪而灭,不利于木马隐藏,需要将executeHandler从handlers.go拷贝到handlers_windows.go里,核心代码为cmd.SysProcAttr=&syscall.SysProcAttr{HideWindow:true}表示隐藏命令弹窗funcexecuteHandler(data[]byte,respRPCRe......