命令模式是一个高内聚的模式,其定义为:Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.(将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能。)------摘至《设计模式之禅》
简单来说命令模式就是一个解耦用模式,把命令发送者和执行者通过中间商(命令对象)来进行解耦,使得发出命令和执行命令对象互不影响。
上代码
/**
* 先定义 接收命令的员工
*/
public interface Staff {
//执行的方法
public void doWork();
}
/**
* A员工
*/
public class StaffA implements Staff{
public void doWork(){
System.out.println("A员工完成了工作");
}
}
/**
* B员工
*/
public class StaffB implements Staff{
public void doWork(){
System.out.println("B员工完成了工作");
}
}
/**
* 定义命令对象
*/
public interface Command {
public void staffDoWork();
}
/**
* 命令对象
*/
public class CommandA implements Command{
private Staff staff;
//命令下发给不同员工
CommandA(Staff staff){
this.staff = staff;
}
public void staffDoWork(){
this.staff.doWork();
}
}
/**
* 发出命令的领导
*/
public class Leader {
//持有命令(不需要去直接命令员工 这里解耦)
private Command command;
//给领导赋予不同的命令
public void setCommand(Command command) {
this.command = command;
}
//执行命令
public void sendCommand(){
this.command.staffDoWork();
}
}
/**
* 命令模式测试方法
*/
public class CommandTest {
public static void main(String[] args){
Leader leader = new Leader();
Command c1 = new CommandA(new StaffA());
leader.setCommand(c1);
leader.sendCommand();
Command c2 = new CommandA(new StaffB());
leader.setCommand(c2);
leader.sendCommand();
}
}
//输出:
//A员工完成了工作
//B员工完成l工作
使用一个命令对象的处理,解耦了发出命令对象和执行命令对象。