1. 类图
- Command:命令接口,声明执行的方法
- ConcreteCommand:命令接口实现,持有并调用接收者的功能
- Receiver:接收者,执行命令的对象
- Invoker:要求命令对象执行请求,通常持有命令对象
- Client:创建具体的命令对象,并设置命令对象的接收者
2. 示例
将请求封装成对象
2.1 命令接口
public interface Command {
void execute();
}
2.2 命令实现
持有命令真正执行的对象
public class OpenCommand implements Command {
private MainBoard mainBoard;
public OpenCommand(MainBoard mainBoard){this.mainBoard = mainBoard;}
@Override
public void execute() {
mainBoard.open();
}
}
2.3 执行命令的对象
public interface MainBoard {
void open();
}
2.4 触发命令对象执行
public class MainBoardImpl implements MainBoard {
@Override
public void open() {
System.out.println("主板正在开机。。。");
System.out.println("接通电源。。。");
System.out.println("设别检查。。。");
System.out.println("装载系统。。。");
System.out.println("开机完成,请操作!!!");
}
}
2.5 具体命令对象
public class Box {
private Command command;
public Box(Command command){this.command = command;}
public void pressOpenBtn(){
command.execute();
}
}
2.6 客户端
public class Client {
public static void main(String[] args) {
// 1. 将命令与真正的实现组合在一起
MainBoard mainBoard = new MainBoardImpl();
Command command = new OpenCommand(mainBoard);
// 2. 机箱设置按钮功能
Box box = new Box(command);
box.pressOpenBtn();
}
}
3. 优点
- 松散耦合
- 更动态的控制
- 更好的扩展性