淺談JAVA設計模式之——命令模式(Command),java設計模式
轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/45569323
一、概述
將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支援可撤消的操作。
二、適用性
1.抽象出待執行的動作以參數化某對象。
2.在不同的時刻指定、排列和執行請求。
3.支援取消操作。
4.支援修改日誌,這樣當系統崩潰時,這些修改可以被重做一遍。
5.用構建在原語操作上的高層操作構造一個系統。
三、參與者
1.Command 聲明執行操作的介面。
2.ConcreteCommand 將一個接收者對象綁定於一個動作。 調用接收者相應的操作,以實現Execute。
3.Client 建立一個具體命令對象並設定它的接收者。
4.Invoker 要求該命令執行這個請求。
5.Receiver 知道如何實施與執行一個請求相關的操作。任何類都可能作為一個接收者。
四、類圖
五、樣本
Command
package com.lyz.design.command;/** * Command * @author liuyazhuang * */public abstract class Command { protected Receiver receiver; public Command(Receiver receiver) { this.receiver = receiver; } public abstract void execute();}
ConcreteCommand
package com.lyz.design.command;/** * ConcreteCommand * @author liuyazhuang * */public class CommandImpl extends Command { public CommandImpl(Receiver receiver) { super(receiver); } public void execute() { receiver.request(); }}
Invoker
package com.lyz.design.command;/** * Invoker * @author liuyazhuang * */public class Invoker { private Command command; public void setCommand(Command command) { this.command = command; } public void execute() { command.execute(); }}
Receiver
package com.lyz.design.command;/** * Receiver * @author liuyazhuang * */public class Receiver { public void receive() { System.out.println("This is Receive class!"); }}Test
package com.lyz.design.command;/** * Test * @author liuyazhuang * */public class Test { public static void main(String[] args) { Receiver rec = new Receiver(); Command cmd = new CommandImpl(rec); Invoker i = new Invoker(); i.setCommand(cmd); i.execute(); }}
Result:
This is Receive class!