1.什么是命令模式
創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)平度,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
命令模式(Command Pattern)是一種數(shù)據(jù)驅(qū)動(dòng)的設(shè)計(jì)模式,它屬于行為型模式。請(qǐng)求以命令的形式包裹在對(duì)象中,并傳給調(diào)用對(duì)象。調(diào)用對(duì)象尋找可以處理該命令的合適的對(duì)象,并把該命令傳給相應(yīng)的對(duì)象,最終把命令給執(zhí)行掉。
使用場(chǎng)景:認(rèn)為是命令的地方都可以使用命令模式。
2.命令模式優(yōu)缺點(diǎn)
優(yōu)點(diǎn): 1、降低了系統(tǒng)耦合度。 2、新的命令可以很容易添加到系統(tǒng)中去。
缺點(diǎn):使用命令模式可能會(huì)導(dǎo)致某些系統(tǒng)有過多的具體命令類。
3.典型案例
貨物進(jìn)出倉(cāng)庫(kù),指令員給庫(kù)方管理人員下達(dá)進(jìn)出貨物的指令,庫(kù)方管理員根據(jù)指令進(jìn)行貨物的進(jìn)出倉(cāng)庫(kù)。
4.代碼實(shí)現(xiàn)
關(guān)鍵代碼:定義三個(gè)角色:1、真正的命令執(zhí)行對(duì)象(Worker) 2、命令(Order) 3、使用命令對(duì)象的入口(Treasurer)
步驟1:創(chuàng)建命令接口(Order)
package com.yx.demo.cmd;
/**
* Order
* 指令接口
*
* @author yx
* @date 2019/11/30 20:57
*/
public interface Order {
void execute();
}
步驟2:創(chuàng)建命令最終執(zhí)行對(duì)象(Worker)。
package com.yx.demo.cmd;
/**
* 工人
*
* 真正命令的執(zhí)行對(duì)象
*
* @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:創(chuàng)建Order接口實(shí)體類,一個(gè)用于進(jìn)貨,一個(gè)用于出貨。
package com.yx.demo.cmd;
/**
* ImportGoods
* 進(jìn)貨指令
*
* @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
*/鄭州婦科醫(yī)院 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 創(chuàng)建庫(kù)房管理員類(Treasurer)。
主要處理接受指令和處理指令,供領(lǐng)導(dǎo)使用。
package com.yx.demo.cmd;
import java.util.ArrayList;
import java.util.List;
/**
* Treasurer
* 倉(cāng)庫(kù)管理員
* 使用命令對(duì)象的入口
*
* @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演示,庫(kù)房管理員接受指令和處理指令
package com.yx.demo.cmd;
/**
* CommandPatternDemo
* 測(cè)試類
*
* @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();
}
}
示例中:進(jìn)出貨物的請(qǐng)求,封裝在ImportGoods和ExportGoods中,領(lǐng)導(dǎo)將指令需求指派給庫(kù)房管理員Treasurer處理,至于Treasurer怎么處理交給哪個(gè)工人處理,領(lǐng)導(dǎo)不關(guān)心,倉(cāng)庫(kù)管理員進(jìn)出貨物找具體的工人執(zhí)行指令。
本文標(biāo)題:Java設(shè)計(jì)模式-命令模式(CommandPattern)
文章位置:http://aaarwkj.com/article34/peesse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、ChatGPT、微信公眾號(hào)、網(wǎng)站改版、域名注冊(cè)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)