定义
将一个请求封装成一个对象,从而让你使用不同的请求参数把客户端参数化,对请求排队或者记录日志请求,可以提供对命令的撤销和恢复模式。
模板方法模式的角色
1:命令角色(Command)
该角色声明一个给所有具体命令类的抽象接口,定义需要执行的命令。
public interface Command{
public void execute();
}
2:具体命令(Concrete Command)
该角色定义一个接受者额行为之间的弱耦合,实现命令方法,并调用接受者的相应操作。
public class ConcreteCommand implements Command{
private Receiver reveicer;
public ConcreteCommand(Receiver receiver){
this.reveicer = receiver;
}
public void execute(){
this.receiver.action();
}
}
3:调用者角色(Invoker)
该角色负责调用命令对象执行请求。
public class Invoker{
private Command command;
public void setCommand(Command command){
this.command = command;
}
public void action(){
this.command.action();
}
}
4:接受者角色(Receiver)
该角色负责具体实施和执行一个请求。
public class Receiver{
public void action(){
System.out.println("执行动作!");
}
}
客户端代码:
public class Client{
public static void main(String[] args){
Invoker invoker = new Invoker();
invoker.setCommand(new ConcreateCommand(new Receiver()));
invoker.action();
}
}
优点
1:类之间解耦,调用者和接收者之间没有依赖关系
2:可扩展性,Comand的子类可以非常容易的扩展。
3:命令模式可以和其他好多模式相结合使用(责任链模式、模板方法模式)
缺点
使用命令模式容易导致系统中出现过多的具体命令类。
使用场景
1:使用命令模式作为回调,在面向对象系统中的替代。
2:需要在不同的事件指定请求,将请求排队。
3:系统需要支持命令的撤销。
4:一个系统需要支持交易的,可以扩展多个交易类型。
参考资料:设计模式(java)
网友评论