Command命令設計模式將一個請求封裝成一個對象,從而使你可用不一樣的請求對客戶進行操做。Command命令設計模式是對命令的封裝。命令模式把發出命令的責任和執行命令的責任分割開,委派給不一樣的對象。每個命令都是一個操做,命令請求發出請求要求執行一個操做;命令接受方收到請求,並執行操做。命令模式容許命令請求方和命令接收方獨立開來,使得命令請求方沒必要 知道命令接收方的接口,更沒必要知道請求是怎麼被接收,以及操做是否被執行,什麼時候被執行,以及是怎麼被執行的。 java
Command命令設計模式結構以下: 設計模式
Command命令設計模式中5個角色: this
(1).客戶角色:建立了一個具體命令對象並肯定其接收者。
(2).命令角色:聲明瞭一個給全部具體命令類的抽象接口。這是一個抽象角色,一般由一個java接口或java抽象類實現。
(3).具體命令角色:定義一個接受者和行爲之間的弱耦合;實現execute方法,負責調用接收者的相應操做。execute方法一般叫作 執行方法。
(4).請求者(Invoke)角色:負責調用命令對象執行請求,相關的方法叫作行動方法。
(5).接收者(Receiver)角色:負責具體實施和執行一個請求。任何一個類均可以成爲接收者,實施和執行請求的方法叫作行動方法。 spa
Command命令設計模式例子代碼以下: 設計
//請求者角色 class Invoker{ private Command command; public Invoker(Command command){ this.command = command; } public void action(){ command.execute(); } } //接收者 class Receiver{ //行動方法 public void action(){ System.out.println("Action has been taken."); } } //抽象命令角色 interface Command{ void execute(); } //具體命令類 class ConcreteCommand implements Command{ private Receiver receiver; public ConcreteCommand(Receiver receiver){ this.receiver = receiver; } public void execute(){ receiver.action(); } } //客戶端 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(); } }
Command命令設計模式的優缺點: code
優勢: 解耦了命令請求者和接受者之間聯繫。請求者調用一個命令,接受者接受請求並執行相應的動做,由於使用Command模式解耦,請求者無需知道接受者任何接口。缺點: 形成出現過多的具體命令類。 對象
JDK中命令模式的應用: 接口