简介:
命令模式:说白了领导(调用者)下个命令(命令)让某人干某事(接收者:实际干活的人)
角色 :
抽象命令:一个抽象类或接口
具体实现命令:具体实现抽象命令,持有接收者,并调用接收者对象的功能来完成执行命令的操作
接收者:真正执行命令的对象,任何类都可以只要能完成命令要求的功能
调用者:通常会持有命令对象,可以持有多个,相当于入口
UML图:
具体命令和接收者可以多个,这样就是领导下达了多个任务,分配不同的人来完成。
实例
package com.sl.demo.command;
/**
* 抽象命令
* @author pengkun
*
*/
public interface Command {
/**
* 执行命令
*/
void execute();
}
package com.sl.demo.command;
/**
* 具体命令
* @author pengkun
*
*/
public class ConcreteCommand implements Command {
//持有接收者
private Receiver receiver;
//初始化接收者
public ConcreteCommand(Receiver receiver) {
super();
this.receiver = receiver;
}
/**
* 执行命令
*/
@Override
public void execute() {
//让接收者来执行相应功能
receiver.concreteExecute();
}
}
接收者
package com.sl.demo.command;
/**
* 接收者
* @author pengkun
*
*/
public class Receiver {
/**
* 真正执行命令
*/
public void concreteExecute() {
System.out.println("Receiver.concreteExecute():"+"我开始执行命令了...");
}
}
调用者
@Test
public void test() {
Receiver receiver=new Receiver();
Command command=new ConcreteCommand(receiver);
Invoker invoker=new Invoker();
invoker.setCommand(command);
invoker.invoker();
}
输出:Receiver.concreteExecute():我开始执行命令了...
总结
命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。