命令模式:将“请求”封装成对象,以便使用不同的请求、队列或日志来参数化其他对象。命令模式也支持可撤销的操作。
为什么需要使用命令模式?使用命令模式有什么好处?按模式UML图来看,客户是知道需要调用哪些具体的命令的,为什么还要通过调用者来调用呢?看起来似乎有点多此一举啊。但是在实际操作中,客户的请求并不是马上被执行的,可是客户将请求提出后,由调用者来请求执行,然后执行者执行动作。动作多种多样,而且必须考虑到会有新动作或新执行者的加入,命令模式就是为了将调用者和执行者解耦的。用现实生活中例子来说,灯是一个执行者,有动作开灯和关灯。如果调用者直接执行灯的开灯和关灯方法,这样调用者就和灯有耦合。如果解除这种耦合,我们加入命令接口,让命令对象封装开灯方法,这样,对调用者来说,只要执行命令对象就可以,不用关心该命令对象的类型。
命令模式如图:
对客户来说,必须知道需要什么功能,因此依赖Receiver,要将Receiver封装入ConcreteCommand中,生成对应的命令,然后调用Invoker的setCommand将ConcreteCommand传入。对于调用者Invoker来说,并不关心传入的是哪种具体的Command,只要实现了Command接口就行。这是Invoker和ConcreteCommand已经解耦了,只需要在需要执行相应动作的时候调用executeCommand即可。
具体举例来说:有Light(Receiver)类,该类有两个action:lightON(),lightOFF(),选择lightON封装入LightONCommand(ConcreteCommand)中,其中execute()方法中执行lightON()。然后调用Invoker的setCommand方法将LightONCommand传入。至此Client的事情就做完了,提交了命令。之后由Invoker执行命令,调用executeCommand方法,使用LightONCommand对象执行execute方法。
当然,Invoker可以保存许多命令的引用来执行,并且可以实现undo来撤销命令。
通过以上分析,命令模式的用法在实现队列非常有用,客户提交命令,命令进入工作队列中,交予调用者执行。调用者并不关注命令的具体内容。比如多线程的执行,处理器当可以的时候,调用command类的execute即可。同时如果应用需要记录操作以便恢复(日志功能),该模式也可以很好的实现,只要实现command 的store方法,将操作记录即可。
分享到:
相关推荐
命令模式是一种行为设计模式,它的主要目的是将请求封装为对象,以便于参数化不同请求、队列请求、记录请求日志以及支持撤销和重做操作。在软件开发中,它帮助解耦了请求发起者(调用者)和请求执行者(接收者),...
这个“Java版设计模式学习笔记”涵盖了多种设计模式,旨在帮助开发者更好地理解和应用这些模式。让我们深入探讨一下其中可能包含的关键知识点。 一、单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问...
行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...
这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决问题的...设计模式笔记中的内容应该涵盖了以上所述的各种模式,通过深入学习和实践,你可以将这些模式应用到实际项目中,提升自己的编程技能和设计能力。
《HeadFirst设计模式学习笔记》是一份详尽的资料,旨在帮助读者深入理解并掌握设计模式这一编程领域的核心概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了一种标准的解决方案,使得代码更易于...
设计模式是软件开发中的一种最佳实践,用于解决常见的设计问题并提供可重用的解决方案。在本文档中,我们主要探讨了设计模式的基本概念和分类,以及“状态机模式”这一特定的设计模式。 首先,设计模式可以分为三大...
在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...
6. **适配器模式**:结构型设计模式,允许两个不兼容的接口之间进行通信。比如,将老版本API与新版本API进行适配,或者在不同编程语言之间进行数据交换。 7. **策略模式**:行为型设计模式,定义一系列算法,并将每...
这份"根据《JAVA与设计模式》整理的笔记及示例代码"涵盖了Java语言和设计模式的核心概念,旨在帮助开发者理解和应用这些模式。 一、设计模式的基本概念 设计模式是对在特定情境下软件设计问题的解决方案的一种描述...
### 设计模式总结笔记 #### 一、概述 设计模式是一种在特定上下文中解决软件设计问题的方案。它并不是一种现成的代码片段或者框架,而是一种指导思想,帮助开发者理解如何更好地组织代码来解决问题。设计模式可以...
### 个人笔记--JAVA基础 #### 一、初识Java **1.1. Java语言是什么** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。它被设计为简单、面向对象、分布式、解释型、健壮、安全、与体系结构...
在IT行业中,设计模式是软件开发中的...通过阅读并实践"pattern.zip"中的代码示例,你可以更深入地理解这些设计模式的实现细节和应用场景。记住,设计模式并不是银弹,选择合适的模式需要根据实际需求和上下文来判断。
设计模式是软件工程中的一种通用解决方案,它是在特定上下文中解决常见问题的经验总结。这个“23种设计模式学习笔记”文档将引导...通过阅读“设计模式学习笔记.doc”,你可以逐一了解并掌握这些模式的原理和使用场景。
《LaTeX教程——LaTeX排版学习笔记——入门提高》是一个专门为初学者设计的资源包,旨在帮助读者快速掌握LaTeX这一强大的文本处理系统。LaTeX是一种基于TeX的文字处理系统,广泛应用于科研、教育和工程领域,尤其在...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
本资料“图解Java设计模式笔记总结word版本”聚焦于通过图文并茂的方式,深入浅出地解析各种设计模式。以下是基于这个主题的详细知识点讲解: 1. **设计模式的分类** - **创建型模式**:如单例(Singleton)、工厂...
这些文档涵盖了设计模式的基础知识,通过阅读和学习,你可以深入了解每种模式的原理、应用场景及其实现方式,从而提升你的软件设计能力。绘图1.vsd可能是用于描绘设计模式的UML类图或其他图表,它能直观地展示各对象...
以及行为型中的策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。 设计模式的实施遵循六项核心原则: 1. **开闭原则**:软件...
这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...