命令模式也屬于行為型模式,它將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象拦焚,讓用戶使用不同的請(qǐng)求把客戶端參數(shù)化杠输。一般有三種角色:1、received 真正的命令執(zhí)行對(duì)象 2僵刮、Command 各種命令3鹦牛、invoker 使用命令對(duì)象的入口。
通過(guò)添加命令接口將請(qǐng)求者和執(zhí)行者解耦曼追。
簡(jiǎn)單實(shí)現(xiàn):
命令接口:
public interface Command {
void execute();
}
命令實(shí)際執(zhí)行者:
public class Receiver {
public void action1(){
System.out.println("action1");
}
public void action2(){
System.out.println("action2");
}
}
定義各種實(shí)際命令
public class ConcreteCommand1 implements Command{
private Receiver receiver;
public ConcreteCommand1(Receiver receive){
this.receiver = receive;
}
@Override
public void execute() {
receiver.action1();
}
}
public class ConcreteCommand2 implements Command{
private Receiver receiver;
public ConcreteCommand2(Receiver receive){
this.receiver = receive;
}
@Override
public void execute() {
receiver.action2();
}
}
命令調(diào)用者
public class Invoker {
private ArrayList<Command> list = new ArrayList<>();
public void setCommand(Command command){
list.add(command);
}
public void execute(){
for (Command command : list)
command.execute();
}
}
測(cè)試類
public static void main(String[] args) {
Invoker invoker = new Invoker();
Receiver receiver = new Receiver();
invoker.setCommand(new ConcreteCommand1(receiver));
invoker.setCommand(new ConcreteCommand2(receiver));
invoker.setCommand(new ConcreteCommand1(receiver));
invoker.execute();
}