學習更多設計模式請參考:入門設計模式之彙總篇 命令模式:把命令包裝成對象,將命令發送者和命令接受者的耦合降低 舉個例子,皇帝發聖旨招一個大臣入宮。 這裡的皇帝就是客戶端,而聖旨就是命令,大臣就是命令接受者。那麼命令發送者通常都是某個公公對吧。這裡就是一個命令模式的實踐,為什麼這樣說呢?平常我們寫代碼 ...
學習更多設計模式請參考:入門設計模式之彙總篇
命令模式:把命令包裝成對象,將命令發送者和命令接受者的耦合降低
舉個例子,皇帝發聖旨招一個大臣入宮。
這裡的皇帝就是客戶端,而聖旨就是命令,大臣就是命令接受者。那麼命令發送者通常都是某個公公對吧。這裡就是一個命令模式的實踐,為什麼這樣說呢?平常我們寫代碼都是一個方法直接調用另一個方法,這樣耦合性太高了,你總不能讓皇帝跑到大臣家告訴他找他有點事吧,要是都這樣皇帝不就累死了。皇帝要做的就是指定命令交個哪一個公公,讓公公這個命令發送者帶著這個命令去找命令接受者,皇帝就在皇宮等著大臣來就行了,而不用關心這從命令交給發送者到命令接受者接收到命令的時候發生了什麼。
我們看一下這個類圖:
- Client:皇帝,也就是客戶端角色。他指定了聖旨的內容,誰是命令發送人,誰是命令接受者。
- Request:公公,也就是命令發送者,他負責帶著命令去找接受者
- Command:命令介面,例如說所有的聖旨都要有奉天承運,皇帝詔曰等等。
- Command:具體命令,在這裡就是宣這個大臣進宮的聖旨
- Reception:命令接受者,命令接受者,也就是大臣了。
下麵來看一下代碼
public class Client {
public static void main(String args[]){
Reception reception=new Reception();
Command command=new CommandImpl(reception);
Request request=new Request(command);
request.action();
}
}
public class Request {
private Command command;
public Request(Command command){
this.command=command;
}
public void action(){
command.excute();
}
}
public interface Command {
public void excute();
}
public class CommandImpl implements Command {
private Reception reception;
public CommandImpl(Reception reception){
this.reception=reception;
}
@Override
public void excute() {
reception.action();
}
}
public class Reception {
public void action(){
System.out.println("臣接旨...");
}
}
這樣的一個簡單的例子就是入門命令模式的demo了,你get到了麽?
本文出自https://zhixiang.org.cn/#/blog/read/4d633838-4663-4cb3-9239-ee5a3c69c23c,轉載請保留。