设计模式 命令模式 实例_根据您的命令-命令设计模式
設(shè)計模式 命令模式 實例
命令設(shè)計模式是一種廣為人知的設(shè)計模式,屬于行為設(shè)計模式(“四人幫”的一部分)。 顧名思義,它與應(yīng)用程序中的動作和事件有關(guān)。
問題陳述:
假設(shè)有一個網(wǎng)頁將在其中包含多個菜單的情況。 編寫此代碼的一種方法是使條件成立,并在每次單擊菜單時執(zhí)行操作。
我們必須根據(jù)操作字符串執(zhí)行操作。 然而,以上代碼如果條件太多,則無法擴(kuò)展。
意圖:
- 動作的請求者需要與執(zhí)行該動作的對象分離。
- 允許將請求封裝為對象。 注意這一行,因為這對于命令模式是非常重要的概念。
- 允許將請求存儲在隊列中,即允許您存儲稍后可以執(zhí)行的操作列表。
解:
要解決上述問題,可以在此處恢復(fù)命令模式。 如上所述,命令模式通過封裝將上述動作移至對象。 這些對象在執(zhí)行時將執(zhí)行命令。 在這里,每個命令都是一個對象。 因此,我們將必須為每個菜單操作(例如NewClass , OpenClass , PrintClass , ExitClass)創(chuàng)建單獨(dú)的類。 所有這些類都繼承自父接口(即Command接口)。 此接口(命令接口)抽象/包裝所有子動作類。
現(xiàn)在,我們介??紹一個Invoker類,其主要工作是將操作與具有該操作的類進(jìn)行映射。 它基本上保留了該動作,并通過調(diào)用execute()方法獲得執(zhí)行請求的命令。
糟糕! 我們在這里錯過了另一個利益相關(guān)者。 這是Receiver類。 接收器類具有執(zhí)行操作的知識。 接收者具有執(zhí)行動作時該做什么的知識。
結(jié)構(gòu)體:
以下是“命令設(shè)計”模式的參與者:
- 命令–這是用于執(zhí)行操作的接口。
- ConcreteCommand –此類擴(kuò)展了Command接口并實現(xiàn)了execute方法。 此類在操作和接收者之間創(chuàng)建綁定。
- 客戶端–此類創(chuàng)建ConcreteCommand類并將其與接收者相關(guān)聯(lián)。
- 調(diào)用程序–此類要求命令執(zhí)行請求。
- 接收器–此類知道要執(zhí)行的操作。
范例 :
腳步:
代碼示例:
命令界面:
public interface ActionListenerCommand {public void execute(); }接收器類別:
public class Document {public void Open(){System.out.println('Document Opened');}public void Save(){System.out.println('Document Saved');} }具體命令:
public class ActionOpen implements ActionListenerCommand {private Document adoc;public ActionOpen(Document doc) {this.adoc = doc;}@Overridepublic void execute() {adoc.Open();} }祈求者等級:
public class MenuOptions {private ActionListenerCommand openCommand;private ActionListenerCommand saveCommand;public MenuOptions(ActionListenerCommand open, ActionListenerCommand save) {this.openCommand = open;this.saveCommand = save;} public void clickOpen(){openCommand.execute(); } public void clickSave(){saveCommand.execute(); } }客戶類別 :
public class Client {public static void main(String[] args) {Document doc = new Document();ActionListenerCommand clickOpen = new ActionOpen(doc);ActionListenerCommand clickSave = new ActionSave(doc);MenuOptions menu = new MenuOptions(clickOpen, clickSave);menu.clickOpen();menu.clickSave();}}
優(yōu)點(diǎn):
命令模式有助于解耦調(diào)用方和接收方。 接收者是知道如何執(zhí)行動作的人。
命令應(yīng)能夠執(zhí)行撤消和重做操作。
這種模式在可擴(kuò)展性方面有所幫助,因為我們可以在不更改現(xiàn)有代碼的情況下添加新命令。
退稅:
命令模式的主要缺點(diǎn)是每個單獨(dú)命令的類數(shù)增加。 這些項目也可以通過方法實現(xiàn)來完成。 但是,命令模式類比使用if else條件創(chuàng)建多個方法更具可讀性。
有趣的一點(diǎn):
- java.lang.Runnable和javax.swing.Action的實現(xiàn)遵循命令設(shè)計模式。
- 命令可以使用Memento維護(hù)撤消操作所需的狀態(tài)。
下載示例代碼:
參考: 通過您的命令從我們JCG伙伴 Mainak哥斯瓦米在Idiotechie博客。
翻譯自: https://www.javacodegeeks.com/2012/11/by-your-command-command-design-pattern.html
設(shè)計模式 命令模式 實例
總結(jié)
以上是生活随笔為你收集整理的设计模式 命令模式 实例_根据您的命令-命令设计模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos大流量攻击防御(防火墙ddos防
- 下一篇: 设计模式 四人帮_四人帮–代理设计模式