设计模式目录
http://blog.csdn.net/fenglailea/article/details/52733435
风.fox
命令模式 Method Invocation
将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。
命令模式也支持可以撤销操作。
通用类图
组成
- 接受者角色 Receive
该角色就是干活的角色,命令传递到这里是应该被执行的。 - 命令角色 Command
需要执行的所有命令都在这里声明 - 调用者角色 Invoker
接收到命令,并执行命令。
命令模式比较简单,但是在项目中非常频繁地使用,因为它的封装性非常好,把请求方(Invoker)和执行方(Receive)分开了,扩展性也有很好的保障,通用代码比较简单。
案例
JAVA
// 接受者角色
public abstract class Receive{
// 抽象接受者,定义每个接受者都必须完成的业务
public abstract void doSomething();
}
//命令角色
public class ConcreteCommand1 extends Receive{
// 对哪个Receive类进行命令处理
private Receive receive;
// 构造函数传递接受者
public ConcreteCommand1(Receive _receive){
this.receive=_receive;
}
// 必须实现一个命令
public void execute(){
// 业务处理
this.receive.doSomething();
}
}
public class ConcreteCommand2 extends Receive{
// 对哪个Receive类进行命令处理
private Receive receive;
// 构造函数传递接受者
public ConcreteCommand2(Receive _receive){
this.receive=_receive;
}
// 必须实现一个命令
public void execute(){
// 业务处理
this.receive.doSomething();
}
}
//调用者角色 Invoker
public class Invoker{
private Command command;
// 受气包,接受命令
public void setCommand(Command _command){
this.command=_command;
}
//执行命令
public void action(){
this.command.execute();
}
}
//场景
public class Client{
public static void main(String[] args){
//首先声明调用者Invoker
Invoker invoker=new Invoker();
// 定义接受者
Receiver receiver=new ConcreteReciver1();
// 定义一个发送给接受者的命令
Command command = new ConcreteCommand1(receiver);
// 把命令交给调用者去执行
invoker.setCommand(command);
invoker.action();
}
}
优点
类间解耦
可扩展性
命令模式结合其他模式会更会优秀
使用场景
只要你认为是命令的地方就可以采用命令模式