【转】设计模式学习笔记之命令模式

c语言实现语音检测vad_壹鸽技术科普·智能语音客服系统中的前端语音处理技术... 随着智能客服机器人产业的迅速发展,尤其是伴随着人工智能AI的风潮,预计在2020年我国智能客服市场将达到万亿级别。在智能客服机器人领域中对电话信道语音进行端点检测处理的应用正在不断扩展和深化。目前语音端点检测(Voice Active Detection,简称VAD)的主要任务是准确快速判决出待处理的语音信号有话还是无话,作为自动语音识别(Automatic Speech Recognition,... 阅读详情

定义:将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式支持可撤销等操作。

命令模式将发出请求的对象和执行请求的对象解耦。在被解耦的两者之间是通过命令对象进行沟通的。

案例代码下载

案例情景:开灯和关灯操作是电灯的基本操作。我们用命令模式模拟这种情景。

Handler.java

  1. public class Handler { 
  2.     public static final int LIGHT_OPEN = 0; 
  3.     public static final int LIGHT_CLOSE= 1; 
  4.     public void handleMessage(Message msg){ 
  5.         int what = msg.what; 
  6.         Light l = (Light) msg.obj; 
  7.         switch(what){ 
  8.         case LIGHT_OPEN : 
  9.             l.lightOn(); 
  10.             break; 
  11.         case LIGHT_CLOSE: 
  12.             l.lightOff(); 
  13.             break; 
  14.         } 
  15.     } 
  16. } 
public class Handler {
	public static final int LIGHT_OPEN = 0;
	public static final int LIGHT_CLOSE= 1;
	public void handleMessage(Message msg){
		int what = msg.what;
		Light l = (Light) msg.obj;
		switch(what){
		case LIGHT_OPEN :
			l.lightOn();
			break;
		case LIGHT_CLOSE:
			l.lightOff();
			break;
		}
	}
}
Message.java

  1. public class Message { 
  2.     int what; 
  3.     int arg1; 
  4.     int arg2; 
  5.     Object obj; 
  6.     Handler mHandler; 
  7.     public Message(int what,Object obj){ 
  8.         this.what = what; 
  9.         this.obj = obj; 
  10.     } 
  11.     public void setTarget(Handler handler){ 
  12.         mHandler = handler; 
  13.     } 
  14.     public void sendMessage(){ 
  15.         mHandler.handleMessage(this); 
  16.     } 
  17. } 
public class Message {
	int what;
	int arg1;
	int arg2;
	Object obj;
	Handler mHandler;
	public Message(int what,Object obj){
		this.what = what;
		this.obj = obj;
	}
	public void setTarget(Handler handler){
		mHandler = handler;
	}
	public void sendMessage(){
		mHandler.handleMessage(this);
	}
}
Light.java

  1. public class Light { 
  2.     public void lightOn(){ 
  3.         System.out.println("开灯"); 
  4.     } 
  5.     public void lightOff(){ 
  6.         System.out.println("关灯"); 
  7.     } 
  8. } 
public class Light {
	public void lightOn(){
		System.out.println("开灯");
	}
	public void lightOff(){
		System.out.println("关灯");
	}
}

Test.java

  1. /**
  2. * 命令模式使命令发送者与命令接收者完全解耦,他们互相不需要知道对方的逻辑实现。
  3. * Message即是命令的包装者,也是命令的发送者,其实真正的发送者是Handler
  4. * 客户端也就是命令的接收者,Light,怎么开灯,怎么关灯,我们不需要知道其内部逻辑,我们只需发出命令。
  5. * @author
  6. *
  7. */ 
  8. public class Test { 
  9.     public static void main(String args[]){ 
  10.         Handler handler = new Handler(); 
  11.         Light light = new Light();//命令接收者 
  12.          
  13.         Message lightOn = new Message(handler.LIGHT_OPEN, light);//包装一条开灯的消息 
  14.         Message lightOff = new Message(handler.LIGHT_CLOSE, light);//包装一条关灯的消息 
  15.          
  16.         lightOff.setTarget(handler); 
  17.         lightOn.setTarget(handler); 
  18.          
  19.         lightOn.sendMessage();//发出命令 
  20.         System.out.println("--------------------"); 
  21.         lightOff.sendMessage();//发出命令 
  22.  
  23.     } 
  24. } 
/**
 * 命令模式使命令发送者与命令接收者完全解耦,他们互相不需要知道对方的逻辑实现。
 * Message即是命令的包装者,也是命令的发送者,其实真正的发送者是Handler
 * 客户端也就是命令的接收者,Light,怎么开灯,怎么关灯,我们不需要知道其内部逻辑,我们只需发出命令。
 * @author
 *
 */
public class Test {
	public static void main(String args[]){
		Handler handler = new Handler();
		Light light = new Light();//命令接收者
		
		Message lightOn = new Message(handler.LIGHT_OPEN, light);//包装一条开灯的消息
		Message lightOff = new Message(handler.LIGHT_CLOSE, light);//包装一条关灯的消息
		
		lightOff.setTarget(handler);
		lightOn.setTarget(handler);
		
		lightOn.sendMessage();//发出命令
		System.out.println("--------------------");
		lightOff.sendMessage();//发出命令

	}
}

测试结果:

  1. 开灯 
  2. -------------------- 
  3. 关灯 
开灯
--------------------
关灯

总结:命令模式有很多变种,规整的命令模式会将命令委托给接收者,但我们也可以在命令包装类中就实现命令处理逻辑。
vscode使用continue插件连接LM studio的模型 本文详细介绍了如何使用VSCode的Continue插件连接LM Studio模型。主要步骤包括:在LM Studio中加载模型并设置相关参数,启动API服务,修改Continue配置文件以集成LM Studio模型,并进行测试以验证连接是否成功。通过这些步骤,用户可以将LM Studio中的预训练模型与VSCode的Continue插件无缝对接,实现高效的自然语言处理和编程辅助功能。 阅读详情

相关推荐

STM32F103C8T6心电采集实战:从PCB设计到上位机开发的完整指南(附TI杯开源资料)

本文详细介绍了基于STM32F103C8T6的心电采集系统开发全流程,从PCB设计到上位机开发,特别适合大学生电子设计大赛参赛者参考。内容涵盖硬件设计精要、软件算法优化及上位机开发技巧,并附TI杯开源资料,帮助开发者低成本实现医疗级心电信号采集。

kafka6courier的博客 194

设计模式学习笔记之命令模式

定义:将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式支持可撤销等操作。 命令模式将发出请求的对象和执行请求的对象解耦。在被解耦的两者之间是通过命令对象进行沟通的。 案例代码下载 案例情景:开灯和关灯操作是电灯的基本操作。我们用命令模式模拟这种情景。 Handler.java public class Handler { public static fi

hailushijie的专栏 1990

Nuvoton OpenTitan开源安全芯片技术解析与应用

硬件安全模块(HSM)作为可信计算基的核心组件,其设计透明度和可验证性正成为行业焦点。RISC-V架构凭借开源特性,为构建可审计的安全芯片提供了新范式。OpenTitan项目通过开放Verilog源码和形式化证明,实现了从物理不可克隆函数(PUF)到分层安全启动的全栈透明。该方案在lowRISC Voyager开发板上实测显示,安全启动时间小于200ms,性能损耗仅7%,显著优于传统黑盒方案。目前该技术已应用于Chromebook和数据中心,其40nm工艺版本更将功耗降至5μA待机水平,为物联网和边缘计算提

weixin_36303807的博客 402

详解Message,Handler,MessageQueue,Looper的关系

在讲它们之间的关系前先介绍几个相关概念: 一、Message消息   1、作用:线程间通讯的数据单元,可以封装数据      2、创建:调用其静态方法Message.obtain(),直接从内部维护的消息池中获取一个已有的消息。   3、常见属性:      int what : 唯一标识此消息      int arg1,arg2:Message对象可以封装的int型数据

xiaoyantan的博客 2028

神经网络(十五)在VS Code下搭建PyTorch环境

pytorch在vscode中的配置和使用

就随便写写.... 5万+

DDR ECC错误注入与寄存器配置实战指南

本文详细介绍了DDR ECC错误注入的核心价值与实战操作指南,包括通过FI_Dx和FI_ECC寄存器注入数据与ECC错误的方法。文章提供了环境准备、寄存器配置、错误检测及系统可靠性测试策略,帮助开发者验证内存系统的纠错能力和可靠性,提升硬件开发的稳定性与效率。

nnn11的博客 1104

命令模式与Android Handler的工作原理

命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。上一段测试代码:public interface Command {public void execute();}public class LightOnCommand implements Command { //具体的命令Light light;//包含接收者pu...

weixin_34413357的博客 297

k8s 查看cpu使用率最高的pod

在 Kubernetes 中,可以使用命令查看 Pod 的资源使用情况,从而找到 CPU 使用率最高的 Pod。

u010674101的专栏 3347

设计模式----命令模式UML和实现代码

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34240520的博客 452

网络安全与黑客攻防常见设备:前置机、跳板机、堡垒机与肉鸡

前置机、跳板机、堡垒机和肉鸡,这些看似冷僻的技术名词,实则是网络安全与黑客攻防战中的关键角色。它们有的守护着企业的数字Pltform,保卫网络安全;有的则成为黑客的跳板,游走于灰色地带。

网络技术联盟站 967

【FPGA教程案例37】通信案例7——基于FPGA的FFT,IFFT傅里叶变换和逆变换

关于FFT和IFFT的相关描述,在上一课程我们已经有所了解,本课程不再重复。在上一课程,我们初步掌握了如何通过FFT对输入信号进行频谱分析,在本课程,我们将学习如何通过FPGA实现FFT和IFFT得到初始信号的过程。关于FFT的IP核配置,和上一课程相同。下面直接介绍其verilog调用过程。我们可以看到,IFFT的配置非常简单,在FFT的基础上,只需要将该参数的最后一位改为0,就可以实现IFFT变化。下面我们通过testbench文件,同时调用FFT和IFFT实现信号的傅里叶变换和逆变换。......

FPGA/MATLAB学习教程/源码/项目合作开发 4518

【设计模式】学习笔记8:命令模式(Command)

走进命令模式 在餐厅的情境中,我们看看餐厅是怎样工作的: 1、顾客走进餐厅,点好菜后,生成订单交给女服务员。 2、女服务员把订单拿到厨房工作室,大喊一声:“订单来了!” 3、厨师订单准备餐点。 上面情境各角色职责: 1、订单封装了顾客的请求。 和一般的对象一样,订单可以被传递,订单内包含一个方法 orderUp(), 这个方法封装了准备餐点所需的动作。订单内有厨师的引用。这些都被封装起来。 2、女服务员的工作就是接受订单,然后调用订单的orderUp( )方法。这里的orderUp具体内容就是把订单交给

D_Double's Journey 3110

多摄像头场景下 ISP 的同步与调度机制实战解析

在智能手机多摄系统中,主摄、广角、长焦、微距等摄像头的协同工作能力直接决定了影像系统的体验上限。而支撑这一能力的核心之一,正是 ISP 的同步与调度机制。ISP 需要处理多个 Sensor 的输入流、统一时序、资源仲裁、并发调度,并支持在不同模式间快速切换(如预览 → 拍照 → 视频)。本文将基于 Qualcomm、MTK、HiSilicon 平台的实际架构,系统性剖析 ISP 在多摄场景下的时序控制、Pipeline 配置、Buffer 管理与故障恢复机制,并分享实战中的典型问题与调试方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2351

设计模式学习笔记——命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 介绍 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为...

Stephen 396

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

设计模式学习笔记 --- 15.命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为模式。请求以命令的形式包裹在对象中,并传给调用对象,调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令; 意图:讲一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化; 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如...

杨鑫newlife的专栏 521

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HeadFirst 设计模式学习笔记6--命令模式

本文已搬家至【HeadFirst 设计模式学习笔记】6 命令模式

gnuhpc的专栏 3553

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

十九、命令模式——设计模式学习笔记

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

L0nginus的博客 499

设计模式学习笔记--命令模式

一.简介 我们正常写程序的时候,要实现一个操作,都是直接调用相应对象的函数进行操作,这样,行为的请求者和行为的实现者就是一种紧耦合的关系。举个简单的例子,比如我们设计一个游戏,按A键是攻击,按B键是放大招,那么我们可以直接将这按键的功能写在相应按键的对应函数上,但是这并不是好的设计,比如我们要进行修改,更换键位,那么修改的内容可能就比较多了。更好的方式是将玩家的输入都看成命令,攻击命令,技能命令

puppet_master的专栏 1180

设计模式——命令模式

《Head First 设计模式》 学习笔记,码云同步更新中 如有错误或不足之处,请一定指出,谢谢~ 目录 设计原则 “依赖倒置”原则 未完待续… 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式——观察者模式 设计模式——简单工厂 设计模式——工厂方法模式 设计模式——抽象工厂模式 设计模式——单例模式 设计模式——命令模式 未完待续… 命令模式(Command Pa...

TrZoey的博客 376

Golang学习笔记_44——命令模式

命令模式是一种行为型设计模式,通过将请求封装为独立对象实现调用者与执行者的解耦,支持请求的队列化、撤销重做和事务管理。其核心特点包括:•请求对象化:将操作抽象为可传递的命令对象•解耦调用链:调用者无需了解具体执行细节•操作可编排:支持命令的组合与顺序控制。

LuckyLay的博客 1401

图说设计模式:命令模式

命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。在命令模式中,将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作模式或事务模式。

cf18862344377的博客 771

java23种设计模式-命令模式

行为型设计模式,将请求封装为对象,使请求的发送者与接收者解耦。支持请求的排队、记录、撤销/重做等操作。

专注后端开发 894

设计模式学习笔记(十七)命令模式

1、解耦调用者和接收者:命令模式将请求发送者与接收者解耦,使得调用者不需要知道接收者的任何细节,只需通过命令进行请求。2、容易扩展新的命令:因为命令模式将命令封装成独立的对象,所以很容易添加新的命令类,无需修改现有的代码。3、支持撤销和重做:命令模式可以记录操作历史,从而支持撤销和重做功能。4、支持事务操作:可以使用命令模式来实现事务操作,将一组相关的命令封装在一个命令对象中,确保它们能够一起执行或撤销。例如日志调用、宏命令等。

weixin_44917291的博客 712

设计模式学习笔记——09 命令模式

命令模式 概念 将一系列请求封装在一个对象中, 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 命令模式是一种数据驱动的设计模式,它属于行为型模式,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 优点: 类间解耦:调用者角色与接收者角色之间没有任何依...

GM. 166

设计模式学习笔记--命令模式(详细笔记)

文章目录1. 概述3. 使用实例 1. 概述 使用背景: 菜鸟教程 在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。 在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。 定义: 《大话设计模式》 命令模式(Command),将一个请求封装为

Gang-bb的博客 610

设计模式学习笔记:命令模式(Command)

在一切变好之前,我们总要经历一些不开心的日子,这段日子也许很长,也许只是一觉醒来。有时候,选择快乐,更需要勇气。 命令模式是设计模式中行为型模式的一种。它是一种数据驱动的模式,将命令封装成一个对象传递给调用者,调用者根据请求的不同寻找合适的命令对象,命令对象调用相应的接收者完成请求。

爱辰 478
上一篇: 这让全场的chinaakd
下一篇: 还亲力亲为的蜡笔小新
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值