最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java以命令模式設計模式

 更新時間:2021年09月02日 15:48:58   作者:No_Game_No_Life_  
這篇文章主要詳細的介紹Java以命令的模式設計模式,是用場景、優(yōu)缺點等都作有詳細介紹,需要的朋友請具體參考下面文章內容

Java以命令模式設計模式

1、簡單介紹

意圖:

將一個請求封裝成一個對象,從而使您可以用不同的請求對客戶進行參數(shù)化。

主要解決:

在軟件系統(tǒng)中,行為請求者與行為實現(xiàn)者通常是一種緊耦合的關系,但某些場合,比如需要對行為進行記錄、撤銷或重做、事務等處理時,這種無法抵御變化的緊耦合的設計就不太合適。

何時使用:

在某些場合,比如要對行為進行"記錄、撤銷/重做、事務"等處理,這種無法抵御變化的緊耦合是不合適的。在這種情況下,如何將"行為請求者"與"行為實現(xiàn)者"解耦?將一組行為抽象為對象,可以實現(xiàn)二者之間的松耦合。

如何解決:

通過調用者調用接受者執(zhí)行命令,執(zhí)行順序:調用者→接受者→命令。

關鍵代碼:定義三個角色

  • received 真正的命令執(zhí)行對象
  • Command
  • invoker 使用命令對象的入口

應用實例:

struts 1 中的 action 核心控制器 ActionServlet 只有一個,相當于 Invoker,而模型層的類會隨著不同的應用有不同的模型類,相當于具體的 Command。

優(yōu)點:

  • 降低了系統(tǒng)耦合度。
  • 新的命令可以很容易添加到系統(tǒng)中去。

缺點:

使用命令模式可能會導致某些系統(tǒng)有過多的具體命令類。

使用場景:

認為是命令的地方都可以使用命令模式,比如:

  • GUI 中每一個按鈕都是一條命令。
  •  模擬 CMD。

注意事項:

系統(tǒng)需要支持命令的撤銷(Undo)操作和恢復(Redo)操作,也可以考慮使用命令模式,見命令模式的擴展。

2、命令模式

命令模式很好理解,舉個例子,司令員下令讓士兵去干件事情,從整個事情的角度來考慮,司令員的作用是,發(fā)出口令,口令經(jīng)過傳遞,傳到了士兵耳朵里,士兵去執(zhí)行。這個過程好在,三者相互解耦,任何一方都不用去依賴其他人,只需要做好自己的事兒就行,司令員要的是結果,不會去關注到底士兵是怎么實現(xiàn)的。我們看看關系圖:

Invoker是調用者(司令員),Receiver是被調用者(士兵),MyCommand是命令,實現(xiàn)了Command接口,持有接收對象,

實現(xiàn)代碼:

public interface Command {  
    public void exe();  
}  
public class MyCommand implements Command {  
  
    private Receiver receiver;  
      
    public MyCommand(Receiver receiver) {  
        this.receiver = receiver;  
    }  
  
    @Override  
    public void exe() {  
        receiver.action();  
    }  
}  
public class Receiver {  
    public void action(){  
        System.out.println("command received!");  
    }  
}  
public class Invoker {  
      
    private Command command;  
      
    public Invoker(Command command) {  
        this.command = command;  
    }  
  
    public void action(){  
        command.exe();  
    }  
}  
public class Test {  
  
    public static void main(String[] args) {  
        Receiver receiver = new Receiver();  
        Command cmd = new MyCommand(receiver);  
        Invoker invoker = new Invoker(cmd);  
        invoker.action();  
    }  
}  

這個很哈理解,命令模式的目的就是達到命令的發(fā)出者和執(zhí)行者之間解耦,實現(xiàn)請求和執(zhí)行分開,熟悉Struts的同學應該知道,Struts其實就是一種將請求和呈現(xiàn)分離的技術,其中必然涉及命令模式的思想!

相關文章

  • Java實現(xiàn)簡易HashMap功能詳解

    Java實現(xiàn)簡易HashMap功能詳解

    這篇文章主要介紹了Java實現(xiàn)簡易HashMap功能,結合實例形式詳細分析了Java實現(xiàn)HashMap功能相關原理、操作步驟與注意事項,需要的朋友可以參考下
    2020-05-05
  • java多線程之Phaser的使用詳解

    java多線程之Phaser的使用詳解

    這篇文章主要介紹了java多線程之Phaser的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Java對敏感數(shù)據(jù)進行加密的方法詳解

    Java對敏感數(shù)據(jù)進行加密的方法詳解

    敏感數(shù)據(jù)的加密是數(shù)據(jù)安全的重要方面,尤其是對于手機號和身份證號這類個人信息,本文主要為大家介紹了Java對敏感數(shù)據(jù)進行加密的相關方法,希望對大家有所幫助
    2024-03-03
  • 一文教會你cmd命令運行java程序

    一文教會你cmd命令運行java程序

    這篇文章主要給大家介紹了關于如何使用cmd命令運行java程序的相關資料,這是一個非常有用的技能,特別是當您需要在沒有集成開發(fā)環(huán)境(IDE)的情況下編寫和運行Java代碼時,需要的朋友可以參考下<BR>
    2024-06-06
  • Spring MVC利用Swagger2如何構建動態(tài)RESTful API詳解

    Spring MVC利用Swagger2如何構建動態(tài)RESTful API詳解

    這篇文章主要給大家介紹了關于在Spring MVC中利用Swagger2如何構建動態(tài)RESTful API的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。
    2017-10-10
  • SpringBoot主鍵ID傳到前端后精度丟失的問題解決

    SpringBoot主鍵ID傳到前端后精度丟失的問題解決

    這篇文章主要通過示例為大家詳細介紹一些SpringBoot如何解決雪花算法主鍵ID傳到前端后精度丟失問題,文中的示例代碼講解詳細,需要的可以參考一下
    2022-05-05
  • IDEA設置Tab選項卡快速的操作

    IDEA設置Tab選項卡快速的操作

    這篇文章主要介紹了IDEA設置Tab選項卡快速的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • IDEA的Mybatis Generator駝峰配置問題

    IDEA的Mybatis Generator駝峰配置問題

    這篇文章主要介紹了IDEA的Mybatis Generator駝峰配置問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 關于java的包Package中同名類的沖突及其理解

    關于java的包Package中同名類的沖突及其理解

    這篇文章主要介紹了關于java的包Package中同名類的沖突及其理解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java實現(xiàn)替換Word中文本和圖片功能

    Java實現(xiàn)替換Word中文本和圖片功能

    Word中的替換功能以查找指定文本然后替換為新的文本,可單個替換或全部替換。本文將用Java語言實現(xiàn)Word中的文本、圖片替換功能,需要的可以參考一下
    2022-06-06

最新評論

多伦县| 富平县| 如皋市| 金乡县| 胶州市| 松原市| 湖北省| 阳山县| 莆田市| 桐梓县| 安仁县| 涿州市| 浑源县| 金溪县| 钦州市| 大理市| 太谷县| 香格里拉县| 嘉祥县| 陆河县| 卓资县| 苍山县| 裕民县| 宝山区| 湘西| 鸡西市| 通山县| 乌兰察布市| 宝山区| 光泽县| 延川县| 大连市| 平遥县| 阜新| 调兵山市| 阿鲁科尔沁旗| 建平县| 伊吾县| 东安县| 丰镇市| 海原县|