您好,登錄后才能下訂單哦!
1.什么是命令模式
命令模式(Command Pattern)是一種數據驅動的設計模式,它屬于行為型模式。請求以命令的形式包裹在對象中,并傳給調用對象。調用對象尋找可以處理該命令的合適的對象,并把該命令傳給相應的對象,最終把命令給執行掉。
使用場景:認為是命令的地方都可以使用命令模式。
2.命令模式優缺點
優點: 1、降低了系統耦合度。 2、新的命令可以很容易添加到系統中去。
缺點:使用命令模式可能會導致某些系統有過多的具體命令類。
3.典型案例
貨物進出倉庫,指令員給庫方管理人員下達進出貨物的指令,庫方管理員根據指令進行貨物的進出倉庫。
4.代碼實現
關鍵代碼:定義三個角色:1、真正的命令執行對象(Worker) 2、命令(Order) 3、使用命令對象的入口(Treasurer)
步驟1:創建命令接口(Order)
package com.yx.demo.cmd;
/**
* Order
* 指令接口
*
* @author yx
* @date 2019/11/30 20:57
*/
public interface Order {
void execute();
}
步驟2:創建命令最終執行對象(Worker)。
package com.yx.demo.cmd;
/**
* 工人
*
* 真正命令的執行對象
*
* @author yx
* @date 2019/11/30 22:06
*/
public class Worker {
private String name = "Goods A";
private int num = 5;
public void importGoods() {
System.out.println("Goods [ Name: " + name + ",num: " + num + " ] import");
}
public void exportGood() {
System.out.println("Goods [ Name: " + name + ",num: " + num + " ] export");
}
}
步驟3:創建Order接口實體類,一個用于進貨,一個用于出貨。
package com.yx.demo.cmd;
/**
* ImportGoods
* 進貨指令
*
* @author yx
* @date 2019/11/30 22:19
*/
public class ImportGoods implements Order {
private Worker mWorker;
public ImportGoods(Worker worker) {
this.mWorker = worker;
}
@Override
public void execute() {
mWorker.importGoods();
}
}
package com.yx.demo.cmd;
/**
* ExportGoods
* 出貨指令
*
* @author yx
* @date 2019/11/30 22:17
*/鄭州婦科醫院 http://www.ytsgfk120.com/
public class ExportGoods implements Order {
private Worker mWorker;
public ExportGoods(Worker worker) {
this.mWorker = worker;
}
@Override
public void execute() {
mWorker.exportGood();
}
}
步驟 4 創建庫房管理員類(Treasurer)。
主要處理接受指令和處理指令,供領導使用。
package com.yx.demo.cmd;
import java.util.ArrayList;
import java.util.List;
/**
* Treasurer
* 倉庫管理員
* 使用命令對象的入口
*
* @author yx
* @date 2019/11/30 22:35
*/
public class Treasurer {
private List orderList = new ArrayList();
public void acceptOrder(Order order) {
orderList.add(order);
}
public void dealOrders() {
for (Order order : orderList) {
order.execute();
}
orderList.clear();
}
}
步驟5:demo演示,庫房管理員接受指令和處理指令
package com.yx.demo.cmd;
/**
* CommandPatternDemo
* 測試類
*
* @author yx
* @date 2019/11/30 22:41
*/
public class CommandPatternDemo {
public static void main(String[] args) {
Worker worker = new Worker();
ImportGoods importGoods = new ImportGoods(worker);
ExportGoods exportGoods = new ExportGoods(worker);
Treasurer treasurer = new Treasurer();
treasurer.acceptOrder(importGoods);
treasurer.acceptOrder(exportGoods);
treasurer.dealOrders();
}
}
示例中:進出貨物的請求,封裝在ImportGoods和ExportGoods中,領導將指令需求指派給庫房管理員Treasurer處理,至于Treasurer怎么處理交給哪個工人處理,領導不關心,倉庫管理員進出貨物找具體的工人執行指令。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。