Java命令模式是一种设计模式,它允许将请求封装成对象,以便可以使用不同的请求、队列或者日志来参数化其他对象。它也允许你支持可撤销的操作。
Java命令模式的核心是一个命令类,它包含执行请求所需的所有信息。这个类通常由三个部分组成:一个代表要执行的动作的 receiver 对象;一个 action 方法;和一个可选的 undo 方法。
public class Command { private Receiver receiver; public Command(Receiver receiver) { this.receiver = receiver; } public void action() { // 调用 Receiver 的功能来执行请求 receiver.action(); } public void undo() { // 调用 Receiver 的功能来执行反向请求 receiver.undo(); } }
命令模式是数据驱动设计模式它是行为模式之一。
请求被作为命令的对象包装传递给invoker对象。
Invoker对象将命令传递到相应的对象并且该对象执行该命令。
import java.util.ArrayList; import java.util.List; interface Command { void execute(); } class MouseCursor { private int x = 10; private int y = 10; public void move() { System.out.println("Old Position:"+x +":"+y); x++; y++; System.out.println("New Position:"+x +":"+y); } public void reset() { System.out.println("reset"); x = 10; y = 10; } } class MoveCursor implements Command { private MouseCursor abcStock; public MoveCursor(MouseCursor abcStock) { this.abcStock = abcStock; } public void execute() { abcStock.move(); } } class ResetCursor implements Command { private MouseCursor abcStock; public ResetCursor(MouseCursor abcStock) { this.abcStock = abcStock; } public void execute() { abcStock.reset(); } } class MouseCommands { private List<Command> orderList = new ArrayList<Command>(); public void takeOrder(Command order) { orderList.add(order); } public void placeOrders() { for (Command order : orderList) { order.execute(); } orderList.clear(); } } public class Main { public static void main(String[] args) { MouseCursor cursor = new MouseCursor(); MoveCursor moveCursor = new MoveCursor(cursor); ResetCursor resetCursor = new ResetCursor(cursor); MouseCommands commands= new MouseCommands(); commands.takeOrder(moveCursor); commands.takeOrder(resetCursor); commands.placeOrders(); } }
上面的代码生成以下结果。
Java面向对象设计 -Java方法重写方法重写重新定义从超类继承的类中的实例方法称为方法重写。例子让我们考虑类A和类B的以下声明:p...
Java面向对象设计 -Java枚举比较您可以通过三种方式比较两个枚举常量:使用Enum类的compareTo()方法使用Enum类的equals()方法使...
JavaFX教程 -JavaFX FlowPaneFlowPane根据可用的水平间距布置一行中的节点当水平空间小于所有节点“宽度"的总和时,将节点包裹到...
Java 实例 - 向文件中追加数据 Java 实例以下实例演示了使用 filewriter 方法向文件中追加数据:import java.io.*;public class ...
Java 实例 - 获取异常的堆栈信息 Java 实例以下实例演示了使用异常类的 printStack() 方法来获取堆栈信息:public class Main{ p...