中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java設計模式-命令模式(Command Pattern)

發布時間:2020-07-18 20:40:08 來源:網絡 閱讀:409 作者:nineteens 欄目:編程語言

  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怎么處理交給哪個工人處理,領導不關心,倉庫管理員進出貨物找具體的工人執行指令。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

裕民县| 石台县| 张家口市| 辽阳县| 汝阳县| 西峡县| 民和| 彩票| 尖扎县| 全州县| 松溪县| 临西县| 大同县| 鄂温| 洞口县| 肃宁县| 仁寿县| 汾西县| 来凤县| 松原市| 甘孜县| 南宫市| 翁源县| 天水市| 荣昌县| 沐川县| 萝北县| 汾阳市| 吉林省| 荆门市| 北碚区| 阳新县| 万安县| 灌云县| 左权县| 耿马| 花莲县| 昌吉市| 黎平县| 赫章县| 绥宁县|