日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

16-命令模式Quarkus实现

發(fā)布時間:2023/12/29 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16-命令模式Quarkus实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

摘要:本文用一個實例場景描述Gof 23設計模式中的命令(Command)模式,并用Quarkus框架代碼給予實現(xiàn),同時也給出實現(xiàn)代碼的UML模型。
關鍵字:Gof 23 設計模式 命令模式 Quarkus

1 基礎知識
1.1 標準定義
命令(Command)模式標準定義:將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤消的操作。
1.2 分析和說明
命令(Command)模式屬于對象行為型模式。命令模式把一個請求或者操作封裝到一個對象中。命令模式把發(fā)出命令的責任和執(zhí)行命令的責任分割開,委派給不同的對象。命令模式允許請求的一方和發(fā)送的一方獨立開來,使得請求的一方不必知道接收請求的一方的接口,更不必知道請求是怎么被接收,以及操作是否執(zhí)行,何時被執(zhí)行以及是怎么被執(zhí)行的。系統(tǒng)支持命令的撤消。
命令(Command)模式結構如圖1所示,其角色包括客戶(Client)角色、命令(Command)角色、具體命令(Concrete Command)角色和接收者(Receiver)角色。
圖1命令模式結構
? 客戶(Client)角色:創(chuàng)建了一個具體命令(ConcreteCommand)對象并確定其接收者。
? 命令(Command)角色:聲明了一個給所有具體命令類的抽象接口。這是一個抽象角色,通常由一個Java接口或Java抽象類實現(xiàn)。
? 具體命令(Concrete Command)角色:定義一個接收者和行為之間的弱耦合;實現(xiàn)execute()方法,負責調用接收者的相應操作。execute()方法通常叫做執(zhí)行方法。
? 接收者(Receiver)角色:負責具體實施和執(zhí)行一個請求。任何一個類都可以成為接收者,實施和執(zhí)行請求的方法叫做行動方法。

2 應用場景舉例
比如公司的一位管理者要對下屬安排工作,就可以通過命令模式。管理者是客戶角色:命令角色是一個抽象類:安排工作就是具體命令角色,具體包括要求編寫工作計劃、上報工作報告等。下屬就是接收者角色。比如說老李這個管理者安排小王編寫工作計劃和上報工作報告。用例見圖2。
圖2 命令模式用例圖
在這里可以把Manager類理解為客戶(Client)角色。Command抽象類是命令(Command)角色。Computer是一種抽象產品(Product)角色。PlanCommand類和ReportCommand類是具體命令(Concrete Command)角色。Subordinate類是接收者(Receiver)角色。其實現(xiàn)類圖如圖3所示。Manager類聚合Command抽象類,Command抽象類聚合Subordinate類,PlanCommand類和ReportCommand類繼承Command抽象類。
圖3 命令模式類圖
命令模式實現(xiàn)順序圖見圖4,實現(xiàn)順序描述:① 基于Subordinate類創(chuàng)建一個subordinate對象。② 基于Manager類創(chuàng)建一個manager對象。③ 基于ReportCommand類創(chuàng)建一個command1對象;④ 調用command1對象的setMan方法,把subordinate對象賦值給command1對象;⑤ 調用manager對象的setCommand方法,把command1對象賦值給manager對象;⑥ 調用manager對象的executeCommand方法,subordinate對象執(zhí)行命令。
圖4 命令模式實現(xiàn)順序圖

3.Quarkus的實現(xiàn)程序代碼
Quarkus程序實現(xiàn)主要包括Command類文件,Manager類文件,Subordinate類文件,PlanCommand類文件和ReportCommand類文件等5個文件。其關系如圖3所示。下面分別列出這5個文件的程序代碼,最后列出測試代碼并顯示輸出結果。
Command抽象類程序代碼清單01所示。
程序代碼清單01

public abstract class Command {protected Subordinate man;public void setMan(Subordinate man) { this.man = man;} public void execute(){} }

Manager類程序代碼清單02所示。
程序代碼清單02

@ApplicationScoped public class Manager {private Command command;public void setCommand(Command command) {this.command = command;}public void ExecuteCommand() {command.Execute();} }

Subordinate類程序代碼清單03所示。
程序代碼清單03

@ApplicationScoped public class Subordinate {private String name ;public Subordinate(){}public Subordinate(String subordinateName){name = subordinateName;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void executeCommand(String task){System.out.println(name+"處理"+task+"內容");} }

PlanCommand類 和ReportCommand 類繼承Command抽象類,其程序代碼清單04所示。
程序代碼清單04

@ApplicationScoped public class PlanCommand extends Command{ public void Execute(){System.out.println("——————編寫計劃——————");man.executeCommand("編寫計劃");} }@ApplicationScoped public class ReportCommand extends Command{ public void Execute(){System.out.println("——————編寫報告——————");man.executeCommand("編寫報告");} }

命令模式測試程序的代碼清單05如下:
程序代碼清單05

public class CommandClient implements QuarkusApplication { @ConfigProperty(name = "gof23.behavioralpattern.command.title", defaultValue = "gof23")String title;@Inject Subordinate subordinate; @Inject Manager manager; @Inject ReportCommand command1; @Inject PlanCommand command2; @Overridepublic int run(String... args){ System.out.println("————————" + title + "演示輸出———————"); subordinate.setName("小劉"); command1.setMan(subordinate); manager.setCommand(command1); manager.ExecuteCommand();command2.setMan(subordinate); manager.setCommand(command2); manager.ExecuteCommand();return 0;}public static void main(String... args) {Quarkus.run(CommandClient.class, args);} }

命令模式測試類輸出結果如下所示:

——————編寫報告——————
小劉執(zhí)行編寫報告的命令
——————編寫計劃——————
小劉執(zhí)行編寫計劃的命令

4. 相關Quarkus程序源碼下載
可以直接從github上獲取代碼,讀者可以從github上clone預先準備好的示例代碼。

git clone https://github.com/rengang66/quarkus-sample-gof23.git

這是一個Maven項目,然后Maven導入工程。該程序位于“src\main\java\com\iiit\quarkus\sample\gof23\behavioralpattern\command”目錄中。
同時也可以從gitee上clone預先準備好的示例代碼,命令如下:

git clone https://gitee.com/rengang66/quarkus-sample-gof23.git

參考文獻

[1] E.Gamma, R.Helm, R.Johnson, and Vlissides. Design Patterns Elements of Reusable Object Oriented Software. Addison-Wesley, 1995
[2] E.Gamma, R.Helm, R.Johnson, and Vlissides.著,李英軍等譯,設計模式:可復用面向對象軟件的基礎,北京:機械工業(yè)出版社.2000.9.
[3] 閻宏,Java與模式,北京:電子工業(yè)出版社. 2002.10
[4] 王俊峰 戚曉濱. 設計模式和UML. 計算機應用研究,1999.16(5), 27-29,39.
[5] 陳琴 朱正強. UML在設計模式描述中的應用. 計算機工程與設計,2003.24(4), 81-84.
[6] 沈建 雷航 石浩鴻. 設計模式在光傳輸網(wǎng)管系統(tǒng)中的應用研究. 計算機技術與發(fā)展,2007.17(3),231-232,235.
[7] 顧穎 徐良賢 賈銀軍. JUnit設計模式分析和應用. 計算機工程,2004.30(B12), 178-179,182.
[8] 劉兵. JUnit設計模式分析. 程序員,2003.(6), 51-57,60.
[9] 戴建國 郭理 曹傳東. JUnit框架剖析. 計算機與數(shù)字工程,2008.36(8), 43-45,135.
[7] 袁杲 楊玲. Observer與Command模式在VTK類庫設計中的應用研究. 西南民族大學學報:自然科學版,2007.33(4), 972-975.
[8] 尚鮮連 陳靜. 兩種設計模式及其在公眾監(jiān)督系統(tǒng)中的應用. 計算機與現(xiàn)代化,2008.(7), 40-42.
[9] 肖計劃 劉海硯 張吉才. 設計模式在地圖制圖軟件開發(fā)中的應用. 測繪工程,2008.17(5), 4-7,11.
[10] 張昊 王彥桂 唐去克. 監(jiān)控繪圖軟件中Undo/Redo的設計和實現(xiàn). 自動化與信息工程,2008.29(1), 23-25.
[11] 余萍. 模式分析及其在報名系統(tǒng)中的應用. 計算機科學,2004.31(B07), 127-130.
[12] 葉建平. 設計模式在游樂設施檢測管理信息系統(tǒng)中的應用. 微計算機信息,2005.21(12X), 213-214,77.
[13] 肖志峰 龔健雅 王艷東 翟曉芳. 面向對象的軟件設計模式在配電GIS中的應用. 測繪信息與工程,2005.30(3), 3-5.
[14] 聶穎. 設計模式在圖形處理軟件中的應用. 計算機應用,2004.24(B12), 189-191.
[15] Quarkus官網(wǎng). https://quarkus.io/

總結

以上是生活随笔為你收集整理的16-命令模式Quarkus实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。