JAVA设计模式之命令模式

  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();

}

}


大体的过程就像这样,
将命令采用一个集合存储起来,这样子命令可以重新执行,或者不执行,或者选择执行,且命令的执行者和命令的发起人完全解耦

























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值