一、什么情况下考虑使用“命令设计模式”?
当我们考虑的场景中需要“动作的请求者”与“动作的执行者”之间解耦,也就是说动作的发起端不必知道动作是如何执行的,只需要下达“命令”就可以执行相应的动作,相当于把方法的调用也封装了起来,只需要对“命令对象”调用统一的方法,然而“命令对象”会知道如何执行相应的方法。
命令模式中的一些概念:
命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也只支持可撤销的操作。
命令对象:将动作以及接收者包装成一个对象,只对外暴露一个特定的方法,当这一特定方法被调用时,接收者就会执行相应的动作。
二、如何是实现“命令设计模式”?
考虑如下场景:需要我们设计一个遥控器,上面有两个按钮,按下时分别为打开电灯,关闭电灯(当然也可以换为开关风扇等等)。此时我们可以考虑使用命令模式。
①我们让所有的命令对象实现命令接口:
public interface Command { public void execute(); }
②建立对应的命令对象:
针对已存在的对象Light建立命令对象
public class Light { public void on(){ System.out.println("Light is on"); } public void off(){ System.out.println("light is off"); } }
打开电灯命令对象(构造函数可以设置具体的对象):
public class LightOnCommand implements Command { Light light; public LightOnCommand(Light light) { this.light = light; } @Override public void execute() { light.on(); } }
关闭电灯命令对象:
public class LightOffCommand implements Command { Light light; public LightOffCommand(Light light){ this.light = light; } @Override public void execute() { light.off(); } }
③建立动作“请求者”——遥控器
public class SimpleRemoteControl { Command onCommand; Command offCommad; public void setOnCommand(Command onCommand) { this.onCommand = onCommand; } public void setOffCommad(Command offCommad) { this.offCommad = offCommad; } public void onButtonWasPressed(){ onCommand.execute(); } public void offButtonWasPressed(){ offCommad.execute(); } }
④为遥控器初始化相应的开关灯的命令。
public class RemoteControlTest { public static void main(String[] args) { SimpleRemoteControl remoteControl = new SimpleRemoteControl(); Light light = new Light(); LightOnCommand lightOnCommand = new LightOnCommand(light); LightOffCommand lightOffCommand = new LightOffCommand(light); remoteControl.setOnCommand(lightOnCommand); remoteControl.setOffCommad(lightOffCommand); remoteControl.onButtonWasPressed(); remoteControl.offButtonWasPressed(); } }
三、命令模式的其他应用:
上面只是最简单的命令模式,我们可以使用宏命令,即为动作的执行为多个命令对象的集合,我们可以让灯闪烁,只要循环执行LightOnCommad与LightOffCommand即可。
我们可以建立一个命令对象的队列,只需要不断的取出命令对象一个一个执行,这样就可已建立一个日程安排了。命令模式还可以用于线程池、工作队列,事务处理等等。
相关推荐
命令模式作为23种设计模式中的一种行为型模式,尤其在处理需要高度解耦、易于扩展的功能模块时,显得特别有用。下面,我们将深入探讨命令模式的定义、结构、优缺点以及在Java中的实现与应用场景。 命令模式的定义是...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式常用于解耦发出命令的对象(调用者)与...
在编程世界中,Java设计模式是面向对象编程领域的一个重要概念,它为解决常见的软件设计问题提供了可重用的解决方案。对于新手来说,设计模式可能显得深奥难懂,但它们实际上是经验丰富的开发者用来提高代码质量、可...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
在这个“设计模式作业——用命令模式java语言编写的烧烤店”项目中,我们将探讨如何运用命令模式来构建一个模拟烧烤店的系统。命令模式是一种行为设计模式,它将请求封装为一个对象,使得我们可以参数化不同的请求、...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
### JAVA设计模式总结之23种设计模式及六大原则 #### 一、设计模式之六大原则 ##### 总原则:开闭原则(Open Close Principle) 开闭原则是设计模式中最核心的原则之一,它强调的是软件实体(类、模块、函数等)...
### Java设计模式经典教程知识点概览 #### 一、设计模式概述 设计模式是一种软件设计方法,它为软件开发者提供了一种标准化的方式去解决常见的软件设计问题。设计模式的使用可以提高代码的可读性和可维护性,同时...
本文将深入探讨Java设计模式的基础知识,从UML的基本概念讲起,再到设计模式的分类与应用场景,以及它们在实际编码中的实践意义。 首先,让我们来了解UML——统一建模语言。UML是一种标准化的建模语言,它为软件...
根据提供的标题、描述以及部分内容,本文将深入探讨Java设计模式,并着重分析23种常见的设计模式,以帮助Java程序员更好地理解和应用这些模式。 ### Java设计模式概述 Java设计模式是面向对象软件设计的一种通用可...
2. **MVC设计模式**:Model-View-Controller(模型-视图-控制器)是Java Web开发中常用的设计模式,用于分离业务逻辑、数据模型和用户界面。在这个系统中,模型负责数据的处理和存储,视图负责用户界面展示,而控制...
《Java与模式》是闫宏大师的一部经典之作,它将古老的哲学智慧——道德经的智慧,巧妙地融入到现代编程语言Java的设计模式之中。这本书不仅深入浅出地讲解了23种经典的设计模式,还提供了丰富的实践案例,旨在帮助...
### Java设计模式(1)——理解与应用 #### 一、设计模式概述 设计模式是在软件工程领域中,为了应对特定问题或情境而形成的最佳实践集合。这些模式可以帮助开发者更高效地解决常见问题,提高代码的可重用性和可...
**JAVA设计模式——核心概念与应用** 设计模式是软件开发中的宝贵经验总结,它们是针对常见问题的可重用解决方案。在Java编程中,设计模式是提升代码质量、可维护性和扩展性的关键。《JAVA设计模式.影印版》这本书...
本文将深入探讨两种重要的设计模式——命令模式和责任链模式,并通过Java代码实例来阐述它们的应用和实现。 首先,我们来看**命令模式**。命令模式的核心思想是将请求封装为一个对象,从而可以将命令参数化、支持...
以上就是Java设计模式的一些基本概念和应用,理解并熟练掌握这些模式对于编写高质量、易于维护的Java代码至关重要。通过阅读《设计模式——Java语言中的应用》这本书,你可以更深入地学习和掌握这些模式的细节及其在...
**Java设计模式——入门** 设计模式是软件开发中的一种最佳实践,它是在特定上下文中解决常见问题的经验总结。Java设计模式是面向对象编程中的一个重要概念,可以帮助开发者编写可复用、可维护、易于理解的代码。这...
Java设计模式——这个“言情版”的表述,可能是以一种轻松幽默的方式讲解这些模式,使得学习过程更加有趣。下面我们将深入探讨Java设计模式的一些核心知识点。 1. **单例模式**:在Java中,单例模式确保一个类只有...