说明(命令模式的角色及职责)
Invoker 是调用者角色Command:是命令角色,需要执行的所有命令都在这里,可以是接口或抽象类Receiver:接收者角色,知道如何实施和执行一个请求相关的操作。ConcreteCommand:聚合一个接收者对象与命令动作,调用接收者相应的操作,实现execute
Command 充当命令角色
//创建命令接口 public interface Command { // 执行动作(操作) public void excute(); // 撤销动作(操作) public void undo(); }LightOffCommand 充当 “ConcreteCommand”,聚合接收者的命令动作(LightReceiver )
public class LightOffCommand implements Command { //聚合LightReceiver LightReceiver light; //构造器 public LightOffCommand(LightReceiver light) { super(); this.light = light; } @Override public void excute() { //调用接收者的方法 light.off(); } @Override public void undo() { //调用接收者的方法 light.on(); } }LightOnCommand 充当 “ConcreteCommand”,聚合接收者的命令动作(LightReceiver )
public class LightOnCommand implements Command { //聚合LightReceiver LightReceiver light; //构造器 public LightOnCommand(LightReceiver light) { super(); this.light = light; } @Override public void excute() { //调用接收者的方法 light.on(); } @Override public void undo() { //调用接收者的方法 light.off(); } }作为一个接收者,实施和执行一个请求相关的操作
public class LightReceiver { public void on(){ System.out.println("电灯打开了.. "); } public void off(){ System.out.println("电灯关闭了.. "); } } /** * 没有任何命令,即空执行:用于初始化每个按钮,当调用空命令时,对象什么都不做 * 其实,这也是一种设计模式,可以省掉对空判断 */ public class NoCommand implements Command{ @Override public void excute() { } @Override public void undo() { } } public class RemoteController { //开按钮的命令数组 Command[] onCommands; Command[] offCommands; //执行撤销的命令 Command undoCommand; //构造器,完成对按钮初始化 public RemoteController() { onCommands = new Command[5]; offCommands = new Command[5]; for (int i = 0; i < 5; i++) { onCommands[i] = new NoCommand(); offCommands[i] = new NoCommand(); } } //给我们的按钮设置你需要的命令 public void setCommand(int no, Command onCommand, Command offCommand) { onCommands[no] = onCommand; offCommands[no] = offCommand; } //按下开按钮 public void onButtonWasPushed(int no) { //找到你按下的开的摁钮,并调用对应的方法 onCommands[no].excute(); //记录这次的操作,用于撤销。 undoCommand = onCommands[no]; } //按下关按钮 public void offButtonWasPushed(int no) { //找到你按下的关的摁钮,并调用对应的方法 offCommands[no].excute(); //记录这次的操作,用于撤销。 undoCommand = offCommands[no]; } //按下撤销按钮 public void undoButtonWasPushed() { undoCommand.undo(); } }首先打开spring框架中JdbcTemplate类的源码
在该类中找到query()方法进行分析