Java 設計模式之命令模式

2021-08-14 23:07:07 字數 2578 閱讀 9340

一、了解命令模式

1.1 什麼是命令模式

命令模式將「請求」封裝成物件,以便使用不同的請求、佇列或者日誌來引數化其他物件。命令模式也支援可撤銷的操作。這種說法比較難以理解,換種說法就是指:

在軟體系統中,「行為請求者」與「行為實現者」通常呈現一種「緊耦合」。但在某些場合,比如要對行為進行「記錄、撤銷/重做、事務」等處理,這種無法抵禦變化的緊耦合是不合適的。

在這種情況下,如何將「行為請求者」與「行為實現者」解耦?將一組行為抽象為物件,實現二者之間的松耦合。這就是命令模式(command pattern)。

1.2 命令模式組成結構

1.3 命令模式 uml **

1.4 命令模式適用場景

二、命令模式具體應用

2.1 問題描述

電燈遙控器:現在讓你為一種新型電燈設計一種手持的遠端遙控器,這個遙控器可以開啟和關閉電燈。

2.2 問題分析設計設計圖

2.3 **實現

接收者 light 類

package com.jas.command;

/** * 電燈提供開啟和關閉的功能

*/public

class

light

void off()

}

命令介面 command

package com.jas.command;

/** * 所有的命令物件都應該實現的介面,提供了乙個執行的方法。

*/public

inte***ce

command

具體命令 lightoncommand 類

package com.jas.command;

public

class

lightoncommand

implements

command

/*** 呼叫電燈開啟的方法

*/@override

public

void

execute()

}

具體命令 lightoffcommand 類

package com.jas.command;

public

class

lightoffcommand

implements

command

/*** 呼叫電燈關閉的方法

*/@override

public

void

execute()

}

呼叫者 remotecontrol 類 (遙控器)

package com.jas.command;

public

class

remotecontrol

/*** 傳入一組命令

* *@param oncommand 開啟電燈的命令物件

*@param offcomand 關閉電燈的命令物件

*/public

void

setcommand(command oncommand, command offcomand)

/*** 開啟電燈的按鈕,通過 oncommand 呼叫 execute() 方法

*/public

void

onbuttonwaspushed()

/*** 關閉電燈的按鈕,通過 offcomand 呼叫 execute() 方法

*/public

void

offbuttonwaspushed()

}

客戶 remoteloader 類

package com.jas.command;

public

class

remoteloader

} /**

* 輸出

* light is on!

* light is off!

*/

三、命令模式總結

3.1 命令模式優缺點優點

缺點使用命令模式可能會導致某些系統有過多的具體命令類。因為針對每乙個命令都需要設計乙個具體命令類,因此某些系統可能需要大量具體命令類,這將影響命令模式的使用。

3.2 命令模式知識點總結

ps:可以參考上面的例子進行知識回顧加深。

參考文獻

《head first 設計模式》

java設計模式之命令模式

意圖 將乙個請求封裝為乙個物件,從而可用不同的請求對客戶進行引數化 對請求排隊或記錄日誌,以及支援可撤銷的操作 動機 將 發出請求的物件 和 接收與執行這些請求的物件 分隔開來。效果 1 command模式將呼叫操作的物件和實現該操作的物件解耦 2 可以將多個命令裝配成乙個復合命令,復合命令是com...

java設計模式之命令模式

定義 把方法呼叫封裝起來,命令模式請求或者操作封裝到乙個物件之中,呼叫的物件需要知道是如何實現的,只要明白如何使用就好。應用場景 記錄日誌,是用這些命令實現撤銷或者恢復的 命令模式對命令進行封裝,發出和執行分派給兩個不同的物件 把請求命令和執行命令分開了 這樣做的好處是 a 便於新的命令加入 b 命...

設計模式之命令模式(java)

命令模式,其實就是進一步封裝,把方法呼叫封裝起來,head first中舉了乙個很生動的例子,飯店中點餐的流暢如下 客戶點了訂單並交給服務端,然後女招待把訂單交給大廚的師傅,大師傅最後呈現出一道可口的菜餚。在這個過程中,客戶只需要知道來飯店點好選單就可以等吃飯了,服務員也是只需要知道把訂單交給大廚,...