16-命令模式Quarkus实现
摘要:本文用一個(gè)實(shí)例場(chǎng)景描述Gof 23設(shè)計(jì)模式中的命令(Command)模式,并用Quarkus框架代碼給予實(shí)現(xiàn),同時(shí)也給出實(shí)現(xiàn)代碼的UML模型。
關(guān)鍵字:Gof 23 設(shè)計(jì)模式 命令模式 Quarkus
1 基礎(chǔ)知識(shí)
1.1 標(biāo)準(zhǔn)定義
命令(Command)模式標(biāo)準(zhǔn)定義:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可撤消的操作。
1.2 分析和說(shuō)明
命令(Command)模式屬于對(duì)象行為型模式。命令模式把一個(gè)請(qǐng)求或者操作封裝到一個(gè)對(duì)象中。命令模式把發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分割開,委派給不同的對(duì)象。命令模式允許請(qǐng)求的一方和發(fā)送的一方獨(dú)立開來(lái),使得請(qǐng)求的一方不必知道接收請(qǐng)求的一方的接口,更不必知道請(qǐng)求是怎么被接收,以及操作是否執(zhí)行,何時(shí)被執(zhí)行以及是怎么被執(zhí)行的。系統(tǒng)支持命令的撤消。
命令(Command)模式結(jié)構(gòu)如圖1所示,其角色包括客戶(Client)角色、命令(Command)角色、具體命令(Concrete Command)角色和接收者(Receiver)角色。
圖1命令模式結(jié)構(gòu)
? 客戶(Client)角色:創(chuàng)建了一個(gè)具體命令(ConcreteCommand)對(duì)象并確定其接收者。
? 命令(Command)角色:聲明了一個(gè)給所有具體命令類的抽象接口。這是一個(gè)抽象角色,通常由一個(gè)Java接口或Java抽象類實(shí)現(xiàn)。
? 具體命令(Concrete Command)角色:定義一個(gè)接收者和行為之間的弱耦合;實(shí)現(xiàn)execute()方法,負(fù)責(zé)調(diào)用接收者的相應(yīng)操作。execute()方法通常叫做執(zhí)行方法。
? 接收者(Receiver)角色:負(fù)責(zé)具體實(shí)施和執(zhí)行一個(gè)請(qǐng)求。任何一個(gè)類都可以成為接收者,實(shí)施和執(zhí)行請(qǐng)求的方法叫做行動(dòng)方法。
2 應(yīng)用場(chǎng)景舉例
比如公司的一位管理者要對(duì)下屬安排工作,就可以通過(guò)命令模式。管理者是客戶角色:命令角色是一個(gè)抽象類:安排工作就是具體命令角色,具體包括要求編寫工作計(jì)劃、上報(bào)工作報(bào)告等。下屬就是接收者角色。比如說(shuō)老李這個(gè)管理者安排小王編寫工作計(jì)劃和上報(bào)工作報(bào)告。用例見圖2。
圖2 命令模式用例圖
在這里可以把Manager類理解為客戶(Client)角色。Command抽象類是命令(Command)角色。Computer是一種抽象產(chǎn)品(Product)角色。PlanCommand類和ReportCommand類是具體命令(Concrete Command)角色。Subordinate類是接收者(Receiver)角色。其實(shí)現(xiàn)類圖如圖3所示。Manager類聚合Command抽象類,Command抽象類聚合Subordinate類,PlanCommand類和ReportCommand類繼承Command抽象類。
圖3 命令模式類圖
命令模式實(shí)現(xiàn)順序圖見圖4,實(shí)現(xiàn)順序描述:① 基于Subordinate類創(chuàng)建一個(gè)subordinate對(duì)象。② 基于Manager類創(chuàng)建一個(gè)manager對(duì)象。③ 基于ReportCommand類創(chuàng)建一個(gè)command1對(duì)象;④ 調(diào)用command1對(duì)象的setMan方法,把subordinate對(duì)象賦值給command1對(duì)象;⑤ 調(diào)用manager對(duì)象的setCommand方法,把command1對(duì)象賦值給manager對(duì)象;⑥ 調(diào)用manager對(duì)象的executeCommand方法,subordinate對(duì)象執(zhí)行命令。
圖4 命令模式實(shí)現(xiàn)順序圖
3.Quarkus的實(shí)現(xiàn)程序代碼
Quarkus程序?qū)崿F(xiàn)主要包括Command類文件,Manager類文件,Subordinate類文件,PlanCommand類文件和ReportCommand類文件等5個(gè)文件。其關(guān)系如圖3所示。下面分別列出這5個(gè)文件的程序代碼,最后列出測(cè)試代碼并顯示輸出結(jié)果。
Command抽象類程序代碼清單01所示。
程序代碼清單01
Manager類程序代碼清單02所示。
程序代碼清單02
Subordinate類程序代碼清單03所示。
程序代碼清單03
PlanCommand類 和ReportCommand 類繼承Command抽象類,其程序代碼清單04所示。
程序代碼清單04
命令模式測(cè)試程序的代碼清單05如下:
程序代碼清單05
命令模式測(cè)試類輸出結(jié)果如下所示:
——————編寫報(bào)告——————
小劉執(zhí)行編寫報(bào)告的命令
——————編寫計(jì)劃——————
小劉執(zhí)行編寫計(jì)劃的命令
4. 相關(guān)Quarkus程序源碼下載
可以直接從github上獲取代碼,讀者可以從github上clone預(yù)先準(zhǔn)備好的示例代碼。
git clone https://github.com/rengang66/quarkus-sample-gof23.git
這是一個(gè)Maven項(xiàng)目,然后Maven導(dǎo)入工程。該程序位于“src\main\java\com\iiit\quarkus\sample\gof23\behavioralpattern\command”目錄中。
同時(shí)也可以從gitee上clone預(yù)先準(zhǔn)備好的示例代碼,命令如下:
git clone https://gitee.com/rengang66/quarkus-sample-gof23.git
參考文獻(xiàn)
[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.著,李英軍等譯,設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ),北京:機(jī)械工業(yè)出版社.2000.9.
[3] 閻宏,Java與模式,北京:電子工業(yè)出版社. 2002.10
[4] 王俊峰 戚曉濱. 設(shè)計(jì)模式和UML. 計(jì)算機(jī)應(yīng)用研究,1999.16(5), 27-29,39.
[5] 陳琴 朱正強(qiáng). UML在設(shè)計(jì)模式描述中的應(yīng)用. 計(jì)算機(jī)工程與設(shè)計(jì),2003.24(4), 81-84.
[6] 沈建 雷航 石浩鴻. 設(shè)計(jì)模式在光傳輸網(wǎng)管系統(tǒng)中的應(yīng)用研究. 計(jì)算機(jī)技術(shù)與發(fā)展,2007.17(3),231-232,235.
[7] 顧穎 徐良賢 賈銀軍. JUnit設(shè)計(jì)模式分析和應(yīng)用. 計(jì)算機(jī)工程,2004.30(B12), 178-179,182.
[8] 劉兵. JUnit設(shè)計(jì)模式分析. 程序員,2003.(6), 51-57,60.
[9] 戴建國(guó) 郭理 曹傳東. JUnit框架剖析. 計(jì)算機(jī)與數(shù)字工程,2008.36(8), 43-45,135.
[7] 袁杲 楊玲. Observer與Command模式在VTK類庫(kù)設(shè)計(jì)中的應(yīng)用研究. 西南民族大學(xué)學(xué)報(bào):自然科學(xué)版,2007.33(4), 972-975.
[8] 尚鮮連 陳靜. 兩種設(shè)計(jì)模式及其在公眾監(jiān)督系統(tǒng)中的應(yīng)用. 計(jì)算機(jī)與現(xiàn)代化,2008.(7), 40-42.
[9] 肖計(jì)劃 劉海硯 張吉才. 設(shè)計(jì)模式在地圖制圖軟件開發(fā)中的應(yīng)用. 測(cè)繪工程,2008.17(5), 4-7,11.
[10] 張昊 王彥桂 唐去克. 監(jiān)控繪圖軟件中Undo/Redo的設(shè)計(jì)和實(shí)現(xiàn). 自動(dòng)化與信息工程,2008.29(1), 23-25.
[11] 余萍. 模式分析及其在報(bào)名系統(tǒng)中的應(yīng)用. 計(jì)算機(jī)科學(xué),2004.31(B07), 127-130.
[12] 葉建平. 設(shè)計(jì)模式在游樂設(shè)施檢測(cè)管理信息系統(tǒng)中的應(yīng)用. 微計(jì)算機(jī)信息,2005.21(12X), 213-214,77.
[13] 肖志峰 龔健雅 王艷東 翟曉芳. 面向?qū)ο蟮能浖O(shè)計(jì)模式在配電GIS中的應(yīng)用. 測(cè)繪信息與工程,2005.30(3), 3-5.
[14] 聶穎. 設(shè)計(jì)模式在圖形處理軟件中的應(yīng)用. 計(jì)算機(jī)應(yīng)用,2004.24(B12), 189-191.
[15] Quarkus官網(wǎng). https://quarkus.io/
總結(jié)
以上是生活随笔為你收集整理的16-命令模式Quarkus实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实达集团任命IT业界知名高管叶成辉为总裁
- 下一篇: “可信区块链全球创新大赛暨布比全国毕业设