命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。
我们使用遥控器的例子来说明一下命令模式
1>新建一个Command(命令)接口
package com.kaishengit.command;
public interface Command {
//命令对象方法
public void execute();
}
2>新建一个遥控器(发出命令对象)类:RemoteControl.java
package com.kaishengit.command;
import java.util.ArrayList;
import java.util.List;
public class RemoteControl {
//用于存放命令
private List<Command> commandList = new ArrayList<Command>();
/**
* 向遥控器中添加命令
* @param command
*/
public void setCommand(Command command){
commandList.add(command);
}
/**
* 按下按键执行第几个命令
* @param index
*/
public void buttonWasPressed(int index){
commandList.get(index - 1).execute();
}
}
3>新建两个电器(执行命令对象):电灯类、电视类
package com.kaishengit.command;
//1.电灯类
public class Light {
public void on(){
System.out.println("灯亮了!");
}
}
package com.kaishengit.command;
//2.电视类
public class Tv {
public void on(){
System.out.println("打开电视!");
}
}
4>新建两个命令对象类(实现Command接口):控制电灯、控制电视
package com.kaishengit.command;
//1.控制电灯
public class LightOnCommand implements Command{
private Light light;
/**
* 传入控制的对象:电灯
* @param light
*/
public LightOnCommand(Light light){
this.light = light;
}
/**
* 执行命令:打开灯
*/
@Override
public void execute() {
light.on();
}
}
package com.kaishengit.command;
//2.控制电视
public class TurnTvCommand implements Command{
private Tv tv;
public TurnTvCommand (Tv tv){
this.tv = tv;
}
@Override
public void execute() {
tv.on();
}
}
5>测试一下
package com.kaishengit.command;
public class Test {
public static void main(String[] args) {
//创建遥控器
RemoteControl remoteControl = new RemoteControl();
//开灯命令
LightOnCommand lightOnCommand = new LightOnCommand(new Light());
//打开电视命令
TurnTvCommand turnTvCommand = new TurnTvCommand(new Tv());
//将命令捆绑到遥控器上
remoteControl.setCommand(turnTvCommand);
remoteControl.setCommand(lightOnCommand);
//按下按钮
remoteControl.buttonWasPressed(1);//执行第一个命令
//remoteControl.buttonWasPressed(2);//执行第二个命令
}
}
执行结果:
---------------------------------
打开电视!
---------------------------------
ok....
宏命令:是对子命令的结合体,一连串命令。
比如这里,我们创建一个宏命令:先开灯,再开电视
1>新建一个宏命令对象(实现Command接口):MacroCommand.java
package com.kaishengit.command;
//宏命令
public class MacroCommand implements Command{
private Command[] commands;
/**
* 传入命令列表
* @param commands
*/
public MacroCommand(Command...commands){
this.commands = commands;
}
/**
* 依次执行命令列表中的命令
*/
@Override
public void execute() {
for(Command command : commands){
command.execute();
}
}
}
2>我们测试一下我们新建的宏命令对象
package com.kaishengit.command;
public class Test {
public static void main(String[] args) {
//创建遥控器
RemoteControl remoteControl = new RemoteControl();
//开灯命令
LightOnCommand lightOnCommand = new LightOnCommand(new Light());
//开电视命令
TurnTvCommand turnTvCommand = new TurnTvCommand(new Tv());
//我们创建的宏命令,传入命令列表:1.开灯命令、2.开电视命令
MacroCommand mc = new MacroCommand(lightOnCommand,turnTvCommand);
//将宏命令捆绑到遥控器上
remoteControl.setCommand(mc);
//按下按钮,执行宏命令
remoteControl.buttonWasPressed(1);
}
}
运行结果:
-------------------
灯亮了!
打开电视!
-------------------
ok。。。
关于命令模式
1.命令模式将发出请求的对象和执行请求的对象解耦
2.在被解耦的两者之间间是通过命令对象进行沟通的,命令对象封装了一个或一组动作
3.调用者通过调用命令对象的execute方法发出请求,这使得接收者对象的劢作被调用
4.宏命令是命令的一种简单延伸,允许调用多个命令
end....
分享到:
相关推荐
命令模式是一种行为设计模式,它将请求封装成独立的对象,使得可以使用不同的请求、队列请求、记录请求历史以及支持可撤销的操作。这种模式在软件工程中被广泛应用,尤其是在需要解耦请求发起者和接收者时,提高了...
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为对象,从而使您可以使用不同的请求、队列请求或日志请求,并支持可撤销操作。命令模式通常用于实现操作的解耦,使得发送者和接收者之间不直接关联...
“[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列请求,或者支持可撤销的操作。在Java中实现命令模式,我们可以利用面向对象编程的特性来构建系统,使得...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Head First 设计模式这本书中,第六章详细介绍了如何在C++中...
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种...[GOF《设计模式》]Command模式结构图如下:图1Command模式结构图Command模式将一个请求封装为一个对象,从而使你可以使用不同的请求对客户进行参数化。
### 命令模式(Command Pattern) #### 概述 命令模式是一种行为设计模式,它将请求封装成对象,以便使用不同的请求对客户端进行参数化。该模式有助于将发送请求的对象与执行请求的对象解耦。 #### 核心概念 在...
**命令模式(Command Pattern)**是一种行为型设计模式,它将请求封装成对象,从而使你能够用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。在命令模式中,请求是以命令的形式...
例如,可以使用命令模式(Command Pattern)封装复杂的用户操作,使回退和重做功能变得简单;使用模板方法模式(Template Method Pattern)定义算法的骨架,让子类实现具体的步骤,实现代码复用。 总结来说,C++...
命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern...
命令模式包含四个主要角色:命令接口(Command)、具体命令(Concrete Command)、接收者(Receiver)和调用者(Invoker)。命令接口定义了执行操作的接口,具体命令实现该接口,持有接收者并调用其方法来执行特定...
14. 命令模式(Command Pattern):将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化。 15. 责任链模式(Chain of Responsibility Pattern):在该模式里,很多对象由每一个对象对其下家的引用...
命令模式(Command Pattern)是一种行为设计模式,它允许将请求封装为一个对象,从而使不同的请求可以使用不同的参数进行参数化,队列或日志请求,以及支持可撤销的操作。在 Java 中,命令模式的实现通常涉及一个...
10. 命令模式(Command Pattern): 命令模式是对方法调用进行封装的方式。它的主要作用是使方法调用变得更加灵活和可扩展。 11. 职责链模式(Chain of Responsibility Pattern): 职责链模式是用来消除请求的发送...
2. 命令模式(Command Pattern):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。 3. 迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部...
命令模式(Command Pattern)是一种将请求封装为一个对象,以便使用不同的请求来参数化客户端、队列或日志请求,以及支持可撤销的操作的行为设计模式。在命令模式中,发送者和接收者之间的耦合被解除,发送请求的...
**命令模式(Command Pattern)详解** 命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在C++中实现命令模式,可以有效地解耦调用者和...