欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Java設(shè)計模式編程中命令模式的項目結(jié)構(gòu)實現(xiàn)

 更新時間:2016年04月28日 09:26:38   作者:匆忙擁擠repeat  
這篇文章主要介紹了Java設(shè)計模式編程中命令模式的項目結(jié)構(gòu)實現(xiàn),命令模式將請求與執(zhí)行分離,可以多個命令接口的實現(xiàn)類,隱藏真實的被調(diào)用方,需要的朋友可以參考下

正論:

命令模式把一個請求或者操作封裝到一個對象中。命令模式運行系統(tǒng)使用不同的請求把客戶端參數(shù)化,對請求排隊或者記錄請求日志,可以提供命令的撤銷和恢復(fù)功能。

通俗:

其實很好理解。命令模式,關(guān)心的就是命令(或者稱為操作)。打個比方。在一個公司里面,整個運作就像一個系統(tǒng)。某個boss發(fā)布了一個命令,中層領(lǐng)導(dǎo)接到這個命令,然后指派給具體負責(zé)這個員工。整個流程很清晰吧。有一個需求,如何將這個流程固定下來,形成一個系統(tǒng)。我們只要抓住了重點:命令。將它抽取出來,其他的都迎刃而解了。抽取出命令,封裝成一個獨立的對象,實現(xiàn)了解耦。至于其他的,可以方便地擴展,不論這個命令是CEO,人事部,還是你爸提出來的。無論這個命令的執(zhí)行者是張三還是王八。這個模式的產(chǎn)生,其實是哲學(xué)上的“抓住主要矛盾”。更多的例子,如其他作家舉的“去路邊吃烤肉和去烤肉店吃烤肉有什么不同”或者“美猴王大鬧天宮中玉帝拍太白金星捉來猴子”。

Java命令模式本質(zhì)是對命令的封裝,從而把發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分割開了,委派給不同的對象。通俗地說,我是老總,我只管發(fā)個命令,至于這個命令發(fā)給誰,誰執(zhí)行,關(guān)我P事,我發(fā)錢請人不是為了給自己找麻煩。你是負責(zé)事情的員工,你的天職是做好上級交給你的任務(wù),踏踏實實,不要知道太多,不要八卦,不要問太多了。

實現(xiàn):
我們先來看一下類圖:

201642892507277.jpg (846×486)

根據(jù)這個我們來看示例代碼:

public interface ICommand { 
  void execute(); 
} 

public class ConcreteCommand implements ICommand { 
  private Receiver receiver; 
 
  public ConcreteCommand(Receiver receiver) { 
    this.receiver = receiver; 
  } 
 
  @Override 
  public void execute() { 
    this.receiver.action(); 
  } 
 
} 

public class Receiver { 
  public void action() { 
    System.out.println("receiver do something"); 
  } 
} 

public class Invoker { 
  private ICommand command; 
   
  public Invoker(ICommand command) { 
    this.command = command; 
  } 
   
  public void invoke() { 
    this.command.execute(); 
  } 
} 

public class Test { 
  public static void main(String[] args) { 
    Receiver receiver = new Receiver();//真正的執(zhí)行者 
    ICommand command = new ConcreteCommand(receiver);//用于的隔離的命令 
    Invoker invoker = new Invoker(command );//調(diào)用者 
    invoker.invoke(); 
  } 
} 


優(yōu)點:

  • 很容易構(gòu)造一個命令隊列
  • 記錄相關(guān)的命令日志
  • 增加命令的狀態(tài),實現(xiàn)命令的撤銷和重做
  • 允許接受請求的一方?jīng)Q定是否可做
  • 新的命令輕而易舉可以加入其中

缺點:
可能會有過多的具體命令類存在。

相關(guān)文章

  • Java和Dubbo的SPI機制原理解析

    Java和Dubbo的SPI機制原理解析

    這篇文章主要介紹了Java和Dubbo的SPI機制原理解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Hadoop MultipleOutputs輸出到多個文件中的實現(xiàn)方法

    Hadoop MultipleOutputs輸出到多個文件中的實現(xiàn)方法

    這篇文章主要介紹了 Hadoop MultipleOutputs輸出到多個文件中的實現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • springboot 使用yml配置文件給靜態(tài)變量賦值教程

    springboot 使用yml配置文件給靜態(tài)變量賦值教程

    這篇文章主要介紹了springboot 使用yml配置文件給靜態(tài)變量賦值教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 用Java實現(xiàn)簡單計算器功能

    用Java實現(xiàn)簡單計算器功能

    這篇文章主要為大家詳細介紹了用Java實現(xiàn)簡單計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • MyBatis自定義類型轉(zhuǎn)換器實現(xiàn)加解密

    MyBatis自定義類型轉(zhuǎn)換器實現(xiàn)加解密

    這篇文章主要介紹了MyBatis自定義類型轉(zhuǎn)換器實現(xiàn)加解密的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • mybatis-plus通用枚舉@JsonValue接收參數(shù)報錯No enum constant

    mybatis-plus通用枚舉@JsonValue接收參數(shù)報錯No enum constant

    最近在使用mybatis-plus時用到了通用枚舉,遇到了問題,本文主要介紹了mybatis-plus通用枚舉@JsonValue接收參數(shù)報錯No enum constant,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Redisson分布式鎖的源碼解讀分享

    Redisson分布式鎖的源碼解讀分享

    Redisson是一個在Redis的基礎(chǔ)上實現(xiàn)的Java駐內(nèi)存數(shù)據(jù)網(wǎng)格(In-Memory?Data?Grid)。Redisson有一樣功能是可重入的分布式鎖。本文來討論一下這個功能的特點以及源碼分析
    2022-11-11
  • 基于SpringBoot構(gòu)建電商秒殺項目代碼實例

    基于SpringBoot構(gòu)建電商秒殺項目代碼實例

    這篇文章主要介紹了基于SpringBoot構(gòu)建電商秒殺項目代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Springboot引入多個yml方法(多種方案)

    Springboot引入多個yml方法(多種方案)

    SpringBoot默認加載的是application.yml文件,所以想要引入其他配置的yml文件,就要在application.yml中激活該文件這篇文章主要介紹了Springboot引入多個yml方法,需要的朋友可以參考下
    2019-10-10
  • Ubuntu安裝jenkins完成自動化構(gòu)建詳細步驟

    Ubuntu安裝jenkins完成自動化構(gòu)建詳細步驟

    Jenkins是一個開源的自動化服務(wù)器,可以用來輕松地建立持續(xù)集成和持續(xù)交付(CI/CD)管道,這篇文章主要給大家介紹了關(guān)于Ubuntu安裝jenkins完成自動化構(gòu)建的相關(guān)資料,需要的朋友可以參考下
    2024-03-03

最新評論