JAVA设计模式之命令模式
命令模式有命令的执行者、命令、以及命令的发出者。命令的发出者可以直接调用命令的执行者,但是这样调用之后就无法记录命令的传递过程,以及命令的undo以及redo等操作,因此,才将命令抽象出来
命令 的执行者:invoker,命令:command,命令的发出者,client
首先定义命令的执行者行为(表示包含的命令)
public class Invoker{
public void exe1(){
//TODO
}
public void exe2(){
//TODO
}
}
其次抽象出命令接口:
public interface Command{
public void exec();
}
实现不同的命令:
public class Exe1Command implements Command{
private Invoker invoker;
public Exe1Command(Invoker invoker){
super();
this.invoker = invoker;
}
public exec(){
invoker.exe1();
}
}
public class Exe2Command implements Command{
private Invoker invoker;
public Exe2Command(Invoker invoker){
super();
this.invoker = invoker;
}
public exec(){
invoker.exe2();
}
}
最后,定义命令的执行者
public class Client{
private List<Command> commandList;
public Client(List<Command> commandList){
this.commandList = commandList;
}
public void exe1()
{
for(Command commond:commandList){
if(commond instanceof Exe1Command){
Exe1Command exe1commond = (Exe1Command)commond;
exe1commond.exec();
}
}
}
//end of exe1
public void exe2()
{
for(Command commond:commandList){
if(commond instanceof Exe2Command){
Exe2Command exe2commond = (Exe2Command)commond;
exe2commond.exec();
}
}
}
}
//执行者定义结束
最后使用该模式:
pubic class Main{
public static void main(String args[]){
Invoker invoker = new Invoker();
Exe1Command com1 = new Exe1Command(invoker);
Exe2Command com2 = new Exe2Command(invoker);
List<Command> comList = new ArrayList<Command>();
comList.add(com1);
comList.add(com2);
//执行
Client client = new Client(comList);
client.exe1();
client.exe2();
}
}
大体的过程就像这样,
将命令采用一个集合存储起来,这样子命令可以重新执行,或者不执行,或者选择执行,且命令的执行者和命令的发起人完全解耦
命令 的执行者:invoker,命令:command,命令的发出者,client
首先定义命令的执行者行为(表示包含的命令)
public class Invoker{
public void exe1(){
//TODO
}
public void exe2(){
//TODO
}
}
其次抽象出命令接口:
public interface Command{
public void exec();
}
实现不同的命令:
public class Exe1Command implements Command{
private Invoker invoker;
public Exe1Command(Invoker invoker){
super();
this.invoker = invoker;
}
public exec(){
invoker.exe1();
}
}
public class Exe2Command implements Command{
private Invoker invoker;
public Exe2Command(Invoker invoker){
super();
this.invoker = invoker;
}
public exec(){
invoker.exe2();
}
}
最后,定义命令的执行者
public class Client{
private List<Command> commandList;
public Client(List<Command> commandList){
this.commandList = commandList;
}
public void exe1()
{
for(Command commond:commandList){
if(commond instanceof Exe1Command){
Exe1Command exe1commond = (Exe1Command)commond;
exe1commond.exec();
}
}
}
//end of exe1
public void exe2()
{
for(Command commond:commandList){
if(commond instanceof Exe2Command){
Exe2Command exe2commond = (Exe2Command)commond;
exe2commond.exec();
}
}
}
}
//执行者定义结束
最后使用该模式:
pubic class Main{
public static void main(String args[]){
Invoker invoker = new Invoker();
Exe1Command com1 = new Exe1Command(invoker);
Exe2Command com2 = new Exe2Command(invoker);
List<Command> comList = new ArrayList<Command>();
comList.add(com1);
comList.add(com2);
//执行
Client client = new Client(comList);
client.exe1();
client.exe2();
}
}
大体的过程就像这样,
将命令采用一个集合存储起来,这样子命令可以重新执行,或者不执行,或者选择执行,且命令的执行者和命令的发起人完全解耦