JAVA设计模式学习21——命令模式
命令模式(别名:动作,事务)
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
一 、 概述
在许多设计中,经常涉及到一个对象请求另一个对象调用其方法到达某种目的。如果请求者不希望或无法直接和被请求者打交道,即不希望或无法含有被请求者的引用,那么就可以使用命令模式。
二、命令模式的结构与使用
模式的结构中包括四种角色:
模式UML类图
1.接收者(Receiver): CompanyArmy.java
public class CompanyArmy{
public void sneakAttack(){
System.out.println("我们知道如何偷袭敌人,保证完成任务");
}
}
2.命令(Command)接口: Command.java
public interface Command {
public abstract voidexecute();
}
3.具体命令(ConcreteCommand)ConcreteCommand.java
public class ConcreteCommand implementsCommand{
CompanyArmy army; //含有接收者的引用
ConcreteCommand(CompanyArmy army){
this.army=army;
}
public void execute(){ //封装着指挥官的请求
army.sneakAttack(); //偷袭敌人
}
}
4.请求者(Invoker)ArmySuperior.java
public class ArmySuperior{
Command command; //用来存放具体命令的引用
public void setCommand(Command command){
this.command=command;
}
public void startExecuteCommand(){
//让具体命令执行execute()方法
command.execute();
}
}
5.应用 Application.java
public class Application{
public static void main(String args[]){
CompanyArmy三连=newCompanyArmy();
Command command=newConcreteCommand(三连);
ArmySuperior指挥官=newArmySuperior();
指挥官.setCommand(command);
指挥官.startExecuteCommand();
}
}
三、命令模式的优点