命令模式的两种不同实现
生活随笔
收集整理的這篇文章主要介紹了
命令模式的两种不同实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自?命令模式(Command)的兩種不同實現
命令模式(Command):將一個請求封裝成一個對象,使得你用不同的請求把客戶端參數化,對請求排隊或者記錄請求日志,可以提供命令的撤銷和恢復功能。 命令模式,顧名思義來理解即可,就是客戶端發布一個命令(也就是“請求”),而這個命令是已經被封裝成一個對象的。即這個命令對象的內部可能已經指定了該命令具體被誰負責執行。就像開發經理從客戶那邊獲取對方的需求(命令),客戶在描述具體的需求可以決定是否明確指出該需求的執行方。 命令模式的通用類圖如下:? 上圖中,Invoker?類就相當于開發經理,ConcreteCommand?類是具體的命令,它繼承自抽象命令類?Command?類,該抽象類中定義了每個命令被執行的方法?execute()?。Receiver?抽象類定義了對每一個具體的命令的執行方法?action()?,一旦接收到命令則立即行動。這里應該注意的是,每個具體的命令類都必須指定該命令的接收者,否則這命令發布了也沒相應的人來完成,那就沒戲了。 具體代碼實現如下: 命令接收者相關類:| 命令01?被發布?...接收者01?完成工作?...命令02?被發布?...接收者02?完成工作?... |
| 命令01?被發布?...接收者01?完成工作?...命令02?被發布?...接收者02?完成工作?...設置命令01由接收者02執行...命令01?被發布?...接收者02?完成工作?... |
此時在客戶端中,我們不指明一個命令的具體接收者(執行者)也同樣可以達到第一種實現方法中的效果。此外,客戶也可以顯式指出具體接收者,就像上面那樣。
命令模式的優點: 1、?調用者與接收者沒有任何的依賴關系,它們時通過具體的命令的存在而存在的; 2、?若有多個具體命令,只要擴展?Command?的子類即可,同樣地具體接收者也可以相對應地進行擴展; 命令模式的缺點:其實上面優點中第2點在一定場景中也會變成缺點。如果具體的命令有很多個,那么子類就必然會暴增、膨脹。 但是,上面的具體代碼實現中這種設計似乎也不太樂觀,原因是每一個具體的命令都是由一個具體的接收者來執行的,在多交互的場景中這顯然是太理想化的。于是,我想到了中介者模式(Mediator)中最主要的?Mediator?類中預先地注冊了業務中需要交互的同事類的對象,接下來每一次交互邏輯都交給?Mediator?來“暗箱”操作。 根據上一段的想法,我們可以在抽象命令?Command?類中預先注冊一定數量的具體接收者,那么具體命令中就可以決定是否要在多個接收者中進行協作完成了,這種協作的代碼邏輯則應該寫在覆蓋父類的execute()?方法中,而在?execute()?方法中又可以運用模板方法模式(Template?Method)進行設計。總結
以上是生活随笔為你收集整理的命令模式的两种不同实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cpu自带集显可以玩云顶之弈吗?
- 下一篇: 装饰器模式和代理模式的区别