定义:
将请求封装成一个对象,从而让用户使用不同的请求吧客户端参数化。请求排队或者记录请求日志,以及支持可撤销的操作
案例:(皇帝命令将军)
- 定义命令的接口,声明执行的方法
//皇帝通过圣旨命令将军
public interface Command {
void excute();
void back();
}
- ConcreteCommand:命令接口实现对象,是“虚”的实现 具体的命令实现对象(可以有多个不同的实现 实现多个不同的功能---扩展)
public class AttachCommand implements Command {
private Army army;//持有接受者的具体对象(军队)
public AttachCommand(Army army) {
this.army = army;
}
@Override
public void excute() {
army.attack();//调用接受者的具体方法 来完成具体的命令
}
@Override
public void back() {
army.back();
}
}
- Receiver:接收者,真正执行命令的对象
//军队
public class Army {
//军队持有士兵引用
private Soldier soldier;
public Army(Soldier soldier) {
this.soldier = soldier;
}
public void attack(){
soldier.setAttach("攻打齐国");
System.out.print(soldier.getAttach()+"\n");
}
public void back(){
soldier.setBack("撤退");
System.out.print(soldier.getBack());
}
}
//士兵
public class Soldier {
private String attach;//进攻
private String back;//撤退
public String getAttach() {
return attach;
}
public String getBack() {
return back;
}
public void setAttach(String attach) {
this.attach = attach;
}
public void setBack(String back) {
this.back = back;
}
}
- Invoker请求者角色
//将军
public class General {
private Command unCommand;
private Command attackCommand;
public General() {
//构建士兵
Soldier soldier=new Soldier();
//构建军队
Army army=new Army(soldier);
//将军指挥军队(命令)
unCommand=new UndoCommand(army);//进攻命令
attackCommand =new AttachCommand(army);//撤退命令
}
/**
* 皇帝调用进攻方法
*/
public void attach(){
attackCommand.excute();
}
/**
* 皇帝调用撤退方法
*/
public void undo(){
unCommand.back();
}
}
- 皇帝调用 Client称为装配者
public class Client {
public static void main(String[] args){
General general=new General();
general.attach();//进攻
general.undo();//撤退
}
}
网友评论