設計模式19——Command設計模式

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中命令模式的應用: 接口

java.lang.Runnable
javax.swing.Action
相關文章
相關標籤/搜索