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