命令模式:命令模式可以對發(fā)送者和接收者完全解耦堕伪,發(fā)送者與接收者之間沒有直接引用關(guān)系臂容,發(fā)送請求的對象只需要知道如何發(fā)送請求哩治,而不必知道如何完成請求猿规。
命令模式結(jié)構(gòu):
- 客戶端(Client)角色:創(chuàng)建一個具體命令(ConcreteCommand)對象并確定其接收者芬萍。
- 命令(Command)角色:聲明了一個給所有具體命令類的抽象接口尤揣。
- 具體命令(ConcreteCommand)角色:定義一個接收者和行為之間的弱耦合;實現(xiàn)execute()方法柬祠,負(fù)責(zé)調(diào)用接收者的相應(yīng)操作北戏。execute()方法通常叫做執(zhí)行方法。
- 請求者(Invoker)角色:負(fù)責(zé)調(diào)用命令對象執(zhí)行請求瓶盛,相關(guān)的方法叫做行動方法最欠。
-
接收者(Receiver)角色:負(fù)責(zé)具體實施和執(zhí)行一個請求。任何一個類都可以成為接收者惩猫,實施和執(zhí)行請求的方法叫做行動方法芝硬。
命令(Command)角色
public interface Command {
void execute();
}
具體命令(ConcreteCommand)角色
public class ConcreteCommand implements Command {
private Receiver receiver = null;
public ConcreteCommand(Receiver receiver){
this.receiver = receiver;
}
@Override
public void execute() {
receiver.action();
}
}
請求者(Invoker)角色:
public class Invoker {
private Command command = null;
public Invoker(Command command){
this.command = command;
}
public void action(){
command.execute();
}
}
接收者(Receiver)角色
public class Receiver {
public void action(){
System.out.println("執(zhí)行操作");
}
}
客戶端(Client)角色
public class Client {
public static void main(String[] args) {
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker(command);
invoker.action();
}
}