命令设计模式需要一个操作和附带的参数,并将它们封装在一个对象中来执行,记录等等。在下面的例子中,命令是一个操作,它的参数是一个Computer,而且它们封装在Switch。
从另一个角度看,命令模式有4个部分:命令,接收者,调用者和客户端。在这个例子中,Switch是调用者,Computer是接收者。一个具体的命令有哥接收器对象并调用接收器中的方法。调用者可以使用不同的具体的命令。客户端为接收器管理使用哪一条命令。
1、命令模式类图
2、Java命令模式的例子
package com.leon.command;
import java.util.ArrayList;
import java.util.List;
//命令接口
interface Command {
void execute();
}
// 在这个例子中,假设你用一个开关来控制电脑
// 一个调用者
class Switch {
private List<Command> history = new ArrayList<Command>();
public Switch() {
}
public void storeAndExecute(Command command) {
this.history.add(command);
command.execute();
}
}
// 接收者
class Computer {
public void shutDown() {
System.out.println("电脑关机");
}
public void restart() {
System.out.println("电脑重启");
}
}
//关闭掉闹的命令
class ShutDownCommand implements Command {
private Computer computer;
public ShutDownCommand(Computer computer) {
this.computer = computer;
}
@Override
public void execute() {
// TODO Auto-generated method stub
computer.shutDown();
}
}
//重启电脑的命令
class ReStartCommand implements Command {
private Computer computer;
public ReStartCommand(Computer computer) {
this.computer = computer;
}
@Override
public void execute() {
// TODO Auto-generated method stub
computer.restart();
}
}
public class Main {
// 客户端
public static void main(String[] args) {
Computer computer = new Computer();
ShutDownCommand shdcmd = new ShutDownCommand(computer);
ReStartCommand rstcmd = new ReStartCommand(computer);
Switch sw = new Switch();
String cmd = "shutdown";
if (cmd.equals("shutdown")) {
sw.storeAndExecute(shdcmd);
} else if (cmd.equals("restart")) {
sw.storeAndExecute(rstcmd);
}
}
}