模式的定义与特点

命令模式(Command Pattern),是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。命令模式是把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。

模式的优点

  • 可扩展性较好,灵活。
  • 降低了系统耦合度。
  • 新的命令可以很容易添加到系统中去。

模式的缺点

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

using DesignPattern.CommandPattern;
using System; namespace DesignPattern
{
internal class Program
{
static void Main(string[] args)
{
CommandHelper();
} #region Pattern - Command
static void CommandHelper()
{
Invoker _invoker = new Invoker();
Receiver _receiver = new Receiver();
ICommand _concreteCommand = new ConcreteCommand(_receiver); _invoker.SetCommand(_concreteCommand);
_invoker.ExecuteCommand(); Console.ReadLine();
}
#endregion
}
} //====================================================================================== namespace DesignPattern.CommandPattern
{
/// <summary>
/// 命令,需要执行的所有命令都在这里声明。
/// </summary>
internal interface ICommand
{
/// <summary>
/// 发布命令
/// </summary>
void Exrcute();
} //====================================================================================== /// <summary>
/// 调用命令者,绑定一个命令,并执行该命令。
/// </summary>
internal class Invoker
{
private ICommand m_command; public void SetCommand(ICommand command)
{
this.m_command = command;
} public void ExecuteCommand()
{
m_command.Exrcute();
}
} //====================================================================================== /// <summary>
/// 命令接收者、执行者。 任何类都可以成为接收者
/// </summary>
internal class Receiver
{
public void Function()
{
Console.WriteLine("接收者接到命令,并且执行了");
}
} //====================================================================================== /// <summary>
/// 一个具体的命令
/// </summary>
internal class ConcreteCommand : ICommand
{
Receiver m_receiver;
/// <summary>
/// 一个具体的命令,将一个接收者绑定,调用接收者相应的操作,以实现执行命令。
/// </summary>
public ConcreteCommand(Receiver receiver)
{
this.m_receiver = receiver;
} public void Exrcute()
{
m_receiver.Function();
}
}
}

总结:

个人觉得命令者模式,和我们常用的事件差不多,ICommand等于Event,Receiver等于被注册的函数,Invoker等于执行Event的函数。拙见,不对的话还望指出。


希望大家:点赞,留言,关注咯~

唠家常

今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加QQ:841298494,大家一起进步。

  • 客官,看完get之后记得点赞哟!
  • 小伙伴你还想要别的知识?好的呀,分享给你们

今日推荐

行为型模式 - 命令模式Command的更多相关文章

  1. vim 的编辑模式 命令模式

    1.vim的编辑模式    进入编辑模式 按键: a  i  o a: 表示在光标当前的,后面开始插入,写数据 i : 则表示 前面 . o : 表面在光标当前的,下一行开始写入数据. O : 大写的 ...

  2. 【设计模式】行为型06命令模式(Command Pattern)

    命令模式 个人理解:命令模式,本质上是一种多层次的封装. 好处:降低耦合,扩展极其方便. 以下一段文案摘抄自:http://www.runoob.com/design-pattern/command- ...

  3. java设计模式--行为型模式--命令模式

    命令模式 概述 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 适用性 .抽象出待执行的动作以参数化某对象. .在不同的时刻指定.排 ...

  4. Java设计模式(九)责任链模式 命令模式

    (十七)责任链模式 责任链模式的目的是通过给予多个对象处理请求的机会,已解除请求发送者与接受者之间的耦合关系.面对对象的开发力求对象之前保持松散耦合,确保对象各自的责任最小化.这种设计能够使得系统更加 ...

  5. 《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式

    [状态模式] No1: Wifi设置界面是一个叫做WifiSetting的Fragment实现的 No2: 在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的.在初始状态下扫描请求被直接忽略, ...

  6. JS模式---命令模式

    var opendoor = { execute: function () { console.log("开门"); } }; var closedoor = { execute: ...

  7. 设计模式学习之命令模式(Command,行为型模式)(12)

    一.命令模式的定义 命令模式属于对象的行为型模式.命令模式是把一个操作或者行为抽象为一个对象中,通过对命令的抽象化来使得发出命令的责任和执行命令的责任分隔开.命令模式的实现可以提供命令的撤销和恢复功能 ...

  8. 命令模式/command模式/行为型模式

    举个栗子 指挥官向士兵下达命令,士兵执行 实现代码如下: class Soldier { public void exe() { System.out.println("执行命令" ...

  9. 命令模式与go-redis command设计

    目录 一.什么是命令(Command)模式 二.go-redis command相关代码 三.总结 一.什么是命令(Command)模式 命令模式是行为型设计模式的一种,其目的是将一个请求封装为一个对 ...

随机推荐

  1. docker-compose编排启动LNMP

    2-1.docker-compose启动php #生成php镜像  [root@rocky8 data]#vim /data/dockerfile/ubuntu_php/Dockerfile  FRO ...

  2. Nginx 使用自签名证书实现 https 反代 Spring Boot 中碰到的页面跳转问题

    问题一:页面自动跳转到 80 端口 问题描述 最近在使用Nginx反代一个Spring Boot项目中碰到了一个问题,使用 Spring Boot 中的 redirect: 进行页面跳转的时候,通过 ...

  3. DevOps|乱谈开源社区、开源项目与企业内部开源

    之前的一篇文章<从特拉斯辞职风波到研发效能中的荒唐事>中关于企业内源的内容在研发效能群内引起了大家的热烈讨论.有的小伙伴不同意,有的小伙伴非常不同意,我觉得这都是非常正常的反馈,话不说不透 ...

  4. C#通过unsafe来操作指针

    这里不介绍unsafe的理论,这里单单介绍它的用法.如果要了解的更具体,可以看这篇大神的博文:C#通过指针操作图像 先从一个很简单的例子介绍: private void TestInptr() { u ...

  5. WIN10使用SSH连接VMWare16 Pro的CentOS8.4(保姆级)

    目录 本机环境 配置连接 本机环境 连接工具用的是MobaXterm,下载地址https://mobaxterm.mobatek.net/download.html VMWare16 Pro Cent ...

  6. 线性时间选择(含平均情况O(n)和最坏情况O(n)算法)

    前言 本篇文章我将介绍 期望为线性时间 的选择算法和 最坏情况为线性时间 的选择算法,即分别为 平均情况下时间复杂度为O(n) 和 最坏情况下时间复杂度为O(n) 的线性时间选择.以下包含了我自己的全 ...

  7. SSH(四)控制层、业务层、dao层类的创建以及applicationcontext.xml和struts.xml配置

    ssh框架的运作方式就是页面请求控制层,控制层调用dao层的方法,dao层完成对数据的操作的一个过程. 现在我们初步简单编写各层的class. action控制层: ActionSupport:实现了 ...

  8. Golang反射获得变量类型和值

    1. 什么是反射 反射是程序在运行期间获取变量的类型和值.或者执行变量的方法的能力. Golang反射包中有两对非常重要的函数和类型,两个函数分别是: reflect.TypeOf 能获取类型信息re ...

  9. 干电池升压3.3V芯片

    PW5100适用于一节干电池升压到3.3V,两节干电池升压3.3V的升压电路,PW5100干电池升压IC. 干电池1.5V和两节干电池3V升压到3.3V的测试数据 两节干电池输出500MA测试: PW ...

  10. CTF中RSA常见类型解法

    Python脚本 #十六进制转ASCII编码 import binascii print(binascii.unhexlify(hex(m)[2:])) #rsa import gmpy2 phi = ...