所谓命令模式本质上讲就是对请求的封装:
那我们在什么时候使用呢?
1 如果需要执行的动作需要被抽取出来
2 需要在不同的时刻指定请求
其实命令式最主要的作用还是用于类之间的解耦。
结构图:
示例代码:
package Proxy.command; public class Invoker { //调用哪一个命令 private Command command; public void setCommand(Command command) { this.command = command; } public Command getCommand() { return command; } //执行命令 public void execute (){ getCommand().action(); } }
package Proxy.command; public interface Command { void action(); }
package Proxy.command; public class ConcreateCommand1 implements Command { private Receiver receiver; public ConcreateCommand1(Receiver receiver) { super(); this.receiver = receiver; } @Override public void action() { this.receiver.execute(); } }
package Proxy.command; public class ConcreateCommand2 implements Command { private Receiver receiver; public ConcreateCommand2(Receiver receiver) { super(); this.receiver = receiver; } @Override public void action() { this.receiver.execute(); } }
package Proxy.command; public class Invoker { //调用哪一个命令 private Command command; public void setCommand(Command command) { this.command = command; } public Command getCommand() { return command; } //执行命令 public void execute (){ getCommand().action(); } }
package Proxy.command; public class ReceiverA implements Receiver { @Override public void execute() { System.out.println("我是A接收者"); } }
package Proxy.command; public class ReceiverB implements Receiver { @Override public void execute() { System.out.println("我是B接收者"); } }
package Proxy.command; public class ReceiverC implements Receiver { @Override public void execute() { System.out.println("我是C接收者"); } }
package Proxy.command; public class Client { public static void main(String[] args) { //先声明调用者 Invoker invoker = new Invoker(); //定义接受者 Receiver receiver = new ReceiverB(); //定义一个具体的命令 Command command = new ConcreateCommand1(receiver); invoker.setCommand(command); invoker.execute(); } }
现在有这样的一个应用场景:
我现在需要定义一个方法,这个方法内部大部分功能或者步骤已经确定,但是有小部分不能确定,也就是所谓的动态代码。
举个列子,我现在在方法内部处理一个数组对象,但是数组对象的处理方式并不是确定的,需要根据调用的时候才能确定。
但是Java又不支持直接传入一个java 代码块给方法,怎么办呢?
所以我们有必要对这部分代码进行封装,但是封装的方法也不允许独立存在,在Java 世界,类才是一等的。所以我们实际
传到该方法的是一个对象。该对象通常是一个接口的匿名子类。该接口通常称为命令接口,这种设计模式也称为命令模式。
public class ProcessArray { //Command用于处理数组的逻辑 public void iterateArray(int[] target,Command command){ command.process(target); } }
//Command 接口 public interface Command { public abstract void process(int[] target); }
具体完整的示例代码:
public class ProcessArrayTest { public static void main(String[] args) { ProcessArray processArray = new ProcessArray(); int [] target = {1,3,5,7,9,11}; //第一次处理数组 processArray.iterateArray(target, new Command() { public void process(int[] target) { for(int tmp : target){ System.out.println("current element:"+tmp); } } }); //第二次处理数组 processArray.iterateArray(target, new Command() { public void process(int[] target) { int sum = 0; for(int tmp : target){ sum += tmp; } System.out.println("Total :"+sum); } }); } }
相关推荐
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列请求,或者支持可撤销的操作。在Java中实现命令模式,我们可以利用面向对象编程的特性来构建系统,使得...
1. **命令接口(Command Interface)**:定义了所有命令对象通用的方法,例如 `execute()` 方法,用于执行请求。 2. **具体命令(Concrete Command)**:实现了命令接口,知道如何接收请求并执行操作。它将接收者...
业务层框架 —— Command Pattern指南.mht业务层框架 —— Command Pattern指南.mht
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为对象,从而使您可以使用不同的请求、队列请求或日志请求,并支持可撤销操作。命令模式通常用于实现操作的解耦,使得发送者和接收者之间不直接关联...
在这个"CommandPattern)管理智能家电最终代码共4页.pdf.zip"文件中,我们可以期待看到如何在实际的智能家电控制系统中应用这种设计模式。 在智能家电的场景中,命令模式可以被用来处理各种家电设备的控制指令。例如...
**命令模式(Command Pattern)详解** 命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在这个场景中,我们关注的是如何利用命令模式...
### 命令模式(Command Pattern) #### 概述 命令模式是一种行为设计模式,它将请求封装成对象,以便使用不同的请求对客户端进行参数化。该模式有助于将发送请求的对象与执行请求的对象解耦。 #### 核心概念 在...
用最简单的例子理解命令模式(Command Pattern) 命令模式的需求源自想通过一个指令(比如这里IControl的Execute方法)来控制多个类的多个方法,包含了几个要素: 1、命令:让类的各种方法抽象成类实现一个接口 2、...
void setCommand(Command* cmd) { command = cmd; } void invoke() { command->execute(); } }; ``` 在这个例子中,`ConcreteCommand1`和`ConcreteCommand2`实现了`Command`接口,它们分别对应接收者`Receiver`的...
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用
调用者通过`AddOnCommand`、`AddOffCommand`和`AddSwitchCommand`方法来添加相应的命令对象,这样就可以在后续调用`ExecuteCommand`时执行对应的命令。 这样的设计使得遥控器(调用者)无需知道每个操作的具体实现...
**命令模式(Command Pattern)详解** 命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在C++中实现命令模式,可以有效地解耦调用者和...
在"Command Pattern Driver Source"中,我们可以期待看到一系列的类和接口,它们共同构成了命令模式的实现。主要组件包括: 1. **命令接口(Command Interface)**:这是所有命令类必须实现的接口,通常定义了一个...
flutter_command_pattern_demo flutter_command_pattern_demo 入门 该项目是Flutter应用程序的起点。 如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门: 要获得Flutter入门方面的帮助,请查看我们的...
12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN ...
工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”...《设计模式》]Command模式结构图如下:图1Command模式结构图Command模式将一个请求