一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java以命令模式設計模式

Java以命令模式設計模式

2021-12-15 12:53No_Game_No_Life_ Java教程

這篇文章主要詳細的介紹Java以命令的模式設計模式,是用場景、優缺點等都作有詳細介紹,需要的朋友請具體參考下面文章內容

Java以命令模式設計模式

1、簡單介紹

意圖:

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

主要解決:

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

何時使用:

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

如何解決:

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

關鍵代碼:定義三個角色

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

應用實例:

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

優點:

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

缺點:

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

使用場景:

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

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

注意事項:

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

2、命令模式

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

Java以命令模式設計模式

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

實現代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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(); 
    

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

原文鏈接:https://blog.csdn.net/No_Game_No_Life_/article/details/85989272

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 欧美成人禁片在线观看俄罗斯 | 国产高清好大好夹受不了了 | 美女毛片视频 | 青青草视频国产 | 国产亚洲综合精品一区二区三区 | 亚洲成人一区二区 | 护士的小嫩嫩好紧好舒服 | 91麻豆精品国产 | 日本精品久久久久久久久免费 | 亚洲AVAV天堂AV在线网爱情 | 视频在线观看一区二区三区 | 四虎成人免费视频 | 九九九精品视频 | 桃乃木香奈ipx在线播放 | 男男调教打屁股 | 欧美一区二区三区免费观看视频 | 无码AV免费精品一区二区三区 | 亚洲女性色尼古综合网 | 果冻传媒在线播放观看228集 | 亚洲春黄在线观看 | 免费看成年视频网页 | 国产成人刺激视频在线观看 | 五月最新商场女厕所高跟嘘嘘 | 国产在线观看精品香蕉v区 国产在线观看a | 国产免费一区二区 | 无码AV免费精品一区二区三区 | 欧美在线视频一区在线观看 | 欧美贵妇vs高跟办公室 | 久久无码人妻中文国产 | 处女呦呦 | 欧美成黑人性猛交xxoo | 色噜噜国产精品视频一区二区 | 国产欧美一区二区三区免费 | 久久er99热精品一区二区 | 91桃色视频在线观看 | 俄罗斯图书馆无打码久久 | 亚洲视频在线免费 | 美女沟厕撒尿全过程高清图片 | 国产性做久久久久久 | 国产精品区一区二区免费 | 91传媒制片厂果冻有限公司 |