設計模式之命令模式

2021-07-31 05:27:25 字數 1848 閱讀 4108

模式定義:

命令模式將請求封裝成物件,以便使用不同的請求、佇列或者日誌來引數化其他物件。命令模式支援可撤銷的操作。

命令模式可以對傳送者額接受者完全解耦,傳送者也接收者之間並沒有直接的聯絡,傳送者只需要知道如何傳送請求,不需要關心請求是如何完成了。這就是命令模式,命令模式將方法呼叫給封裝起來了。

模式結構

模式實現

public class ordermode 

/*** lol之小魚人

*/class fish

public void w()

public void e()

public void r()

}/**

* 預設命令

*/class nocommand implements command

}/**

* 技能q

*/class q implements command

@override

public void execute()

}/**

* 技能w

*/class w implements command

@override

public void execute()

}/**

* 技能e

*/class e implements command

@override

public void execute()

}/**

* 大招r

*/class r implements command

@override

public void execute()

}/**

* 控制器

*/class controller

/*** 設定命令

** @param command

*/public void setcommand(command command)

/*** 回到上乙個命令

*/public void undo()

command.execute();}}

/*** 測試類

*/@test

public void observertest()

}class stack

/*** 壓棧

** @param t

*/public synchronized void push(t t)

data[top++] = t;

}/**

* 出棧

** @return

*/public synchronized t pop()

t t = (t) data[--top];

return t;

}/**

* 獲取元素數

** @return

*/public int getsize()

}

模式優點: 1、

降低了系統耦合度

2、新的命令可以很容易新增到系統中去

3、命令模式支援撤銷

模式缺點:

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

適用場景:

1、系統需要將請求呼叫者和請求接收者解耦,使得呼叫者和接收者不直接互動 2、

系統需要在不同的時間指定請求、將請求排隊和執行請求

3、系統需要支援命令的撤銷(undo)操作和恢復(redo)操作

4、系統需要將一組操作組合在一起,即支援巨集命令

設計模式之命令設計模式

先來看一下命令模式的類圖 乍一看好像類很多,其實我們逐個分析他們。類圖中存在的類可以分為 invoker icommand conceretecommand receiver invoker類 上層直接調取invoker類 icommand 是對命令的抽象 conceretecommand 是命令的...

設計模式之命令模式

command pattern 將請求封裝成物件,這可以讓你使用不同的請求,佇列,或者是日誌請求來引數化其他物件,命令模式也可以支援撤銷操作。命令模式有兩種實現方式 1.在命令管理器中提供設定當前命令接受者的方法,當執行訊息或者是有訊息壓入的時候直接將命令傳送給當前設定的接受者。2.在命令管理器中建...

設計模式之命令模式

當我們有一台多功能的印表機,然後通過電腦直接進行任務,如圖 如果通過這樣的設計直接去呼叫多功能一體機的功能,就會存在此時此刻只能進行乙個任務,不允許有多個客戶端同時操作.那麼現在我們就需要考慮一種新的設計模式,叫做命令設計模式。命令設計模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行...