設計模式學習筆記(六) 命令模式

2021-09-05 12:23:15 字數 3088 閱讀 8910

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

uml類圖

command:為所有的命令宣告了乙個介面,呼叫命令物件的execute方法即可讓接收者進行相關動作。

concretecommand:定義了動作和接收者之間的繫結關係,呼叫者只需要呼叫其execute方法即可發出請求,然後由concretecommand呼叫接收者的動作。

receiver:接受者知道如何進行必要的工作,實現這個請求,任何類都可作為接收者。

invoker:呼叫者持有乙個command引用,呼叫其execute方法發出請求。

分析:命令物件將動作和接收者包進物件中,只暴露出乙個execute方法,當該方法被呼叫時,接收者就會進行這些動作,從外面看,其他物件並不知道究竟哪個接收者進行了哪些動作。

示例

有乙個具有7個插槽的遙控器,每個插槽可以制定到不同的家電上,都有開和關按鈕,還有乙個整體的撤銷功能。

接收者

public

class

door

public

voidon(

)public

void

off()}

public

class

light

public

voidon(

)public

void

off()}

public

class

stereo

public

void

off(

)public

voidon(

)public

void

setcd()

public

void

setvolumn

(int volumn)

}

命令介面

public

inte***ce

command

具體命令類

public

class

garagedoorclosecommand

implements

command

@override

public

void

execute()

}public

class

garagedooropencommand

implements

command

@override

public

void

execute()

}public

class

lightoffcommand

implements

command

@override

public

void

execute()

}public

class

lightoncommand

implements

command

@override

public

void

execute()

}public

class

nocommand

implements

command

}public

class

stereooffcommand

implements

command

@override

public

void

execute()

}public

class

stereooncommand

implements

command

@override

public

void

execute()

}

呼叫者

public

class

remotecontrol

}public

void

setcommand

(int slot,command oncommand,command offcommand)

public

void

onbuttonwaspushed

(int slot)

public

void

offbuttonwaspushed

(int slot)

@override

public string tostring()

return stringbuilder.

tostring();}}

測試

更多用途1、佇列請求:實現命令介面的物件被放入佇列中,執行緒從佇列中提取命令物件,並將其從佇列中刪除,呼叫其execute方法,完成動作,再去處理下乙個命令物件。工作佇列物件並不在乎到底做些什麼工作,它們只是取出命令物件,呼叫execute方法。

2、日誌請求:通過在命令物件中新增store和load兩個方法,每呼叫一次execute,命令物件被store到磁碟上,如果系統出狀況,我們從本地中呼叫load方法,按次序批量執行命令物件的execute方法。

設計模式學習筆記(六) 命令模式

同系列文章 1.設計模式學習筆記 一 策略模式 2.設計模式學習筆記 二 觀察者模式 3.設計模式學習筆記 三 裝飾者模式 4.設計模式學習筆記 四 工廠模式 5.設計模式學習筆記 五 單件模式 又是嶄新的一日,今天我來學習命令模式 gogogo 看了一下書,好多頁呀哈哈哈,有得擼 將 請求 封裝成...

設計模式學習(六)命令模式

將 請求 封裝成物件,以便使用不同的請求 佇列或者日誌來引數化其他物件。命令模式也支援可撤銷的操作。設計遙控器,分別裝有7組 開 與 關 按鈕來控制多個裝置,還需要支援整體的撤銷功能。1.首先,我們需要實現命令的介面 public inte ce command2.分別實現開燈 關燈 開關電風扇等命...

設計模式(六) 命令模式

命令模式 將請求封裝成物件,以便使用不同的請求 佇列或者日誌來引數化其他物件。命令模式也支援可撤銷的操作。public inte ce commandpublic class light public void off public class lightoncommand implements c...