日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Java设计模式-命令模式Command

發(fā)布時間:2025/3/20 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java设计模式-命令模式Command 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

定義

將來自客戶端的請求傳入一個對象,從而使你可用不同的請求對客戶進行參數(shù)化。用于“行為請求者”與“行為實現(xiàn)者”解耦,可實現(xiàn)二者之間的松耦合,以便適應(yīng)變化。分離變化與不變的因素。

UML圖:

角色
Command:定義命令的接口,聲明執(zhí)行的方法。
ConcreteCommand:命令接口實現(xiàn)對象,是“虛”的實現(xiàn);通常會持有接收者,并調(diào)用接收者的功能來完成命令要執(zhí)行的操作。
Receiver:接收者,真正執(zhí)行命令的對象。任何類都可能成為一個接收者,只要它能夠?qū)崿F(xiàn)命令要求實現(xiàn)的相應(yīng)功能。
Invoker:要求命令對象執(zhí)行請求,通常會持有命令對象,可以持有很多的命令對象。這個是客戶端真正觸發(fā)命令并要求命令執(zhí)行相應(yīng)操作的地方,也就是說相當于使用命令對象的入口。
Client:創(chuàng)建具體的命令對象,并且設(shè)置命令對象的接收者。注意這個不是我們常規(guī)意義上的客戶端,而是在組裝命令對象和接收者,或許,把這個Client稱為裝配者會更好理解,因為真正使用命令的客戶端是從Invoker來觸發(fā)執(zhí)行。

總的調(diào)用順序是:

請求者持有命令對象,調(diào)用命令對象的方法,命令對象持有接受者,進而調(diào)用接受者的執(zhí)行方法。

適用情況
1.系統(tǒng)需要將請求調(diào)用者和請求接收者解耦,使得調(diào)用者和接收者不直接交互。
2.系統(tǒng)需要在不同的時間指定請求、將請求排隊和執(zhí)行請求。
3.系統(tǒng)需要支持命令的撤銷(Undo)操作和恢復(Redo)操作。
4.系統(tǒng)需要將一組操作組合在一起,即支持宏命令。


簡單命令模式

package com.hust.command1; //接收者類 public class Receiver {//真正執(zhí)行命令邏輯的方法public void action(){System.out.println("執(zhí)行具體操作!");} } /*** */ package com.hust.command1;/*** 抽象命令接口**/ public interface Command {//執(zhí)行具體操作的命令void execute(); }
package com.hust.command1; //具體命令類 public class ConcreteCommand implements Command {private Receiver receiver;//接收者作為成員變量public ConcreteCommand(Receiver receiver){this.receiver=receiver;}//調(diào)用接收者的相關(guān)方法來執(zhí)行具體邏輯public void execute() { receiver.action();}} /*** */ package com.hust.command1;/*** 請求者類**/ public class Invoker {private Command command;//命令對象做成員變量public Invoker(Command command){this.command=command;}public void action(){//調(diào)用命令對象的相關(guān)方法,執(zhí)行具體命令command.execute();} }
package com.hust.command1;public class Client {/*** @param args*/public static void main(String[] args) {//構(gòu)造一個接收者對象Receiver receiver=new Receiver();//構(gòu)造一個命令對象Command command=new ConcreteCommand(receiver);//構(gòu)造一個請求者對象,去請求命令對象,命令對象在去執(zhí)行操作Invoker invoker=new Invoker(command);invoker.action();}}
俄羅斯方塊游戲,有4個按鈕,兩個左右移動按鈕,一個快速下落按鈕,一個變形按鈕

一個玩游戲的人是相當于客戶端,而游戲上的4個按鈕就相當于請求者,執(zhí)行具體按鈕命令的邏輯方法可以看作是命令角色。

/*** */ package com.hust.shutdown;/*** @author Administrator**/ public class TetrisMachine {//俄羅斯方塊//真正處理“向左”操作的邏輯代碼public void toLeft(){System.out.println("向左");}//真正處理“向右”操作的邏輯代碼public void toRight(){System.out.println("向右");}//真正處理“快速落下”操作的邏輯代碼public void fastToButtom(){System.out.println("快速落下");}//真正處理“改變形狀”操作的邏輯代碼public void transform(){System.out.println("改變形狀");} } /*** */ package com.hust.shutdown;/*** 抽象命令接口**/ public interface Command {//執(zhí)行具體操作的命令void execute(); } package com.hust.shutdown;public class LeftCommand implements Command {//接收者俄羅斯方塊private TetrisMachine machine;public LeftCommand(TetrisMachine machine) {super();this.machine = machine;}public void execute() {// 調(diào)用游戲機的具體方法執(zhí)行操作machine.toLeft();}}
package com.hust.shutdown;public class RightCommand implements Command {//接收者俄羅斯方塊private TetrisMachine machine;public RightCommand(TetrisMachine machine) {super();this.machine = machine;}public void execute() {// 調(diào)用游戲機的具體方法執(zhí)行操作machine.toRight();} }
package com.hust.shutdown;public class FallCommand implements Command {//接收者俄羅斯方塊private TetrisMachine machine;public FallCommand(TetrisMachine machine) {super();this.machine = machine;}public void execute() {// 調(diào)用游戲機的具體方法執(zhí)行操作machine.fastToButtom();}}


《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Java设计模式-命令模式Command的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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