<a href="http://www.cnblogs.com/wolf-sun/p/3468100.html">[head first設計模式]山西面館中的設計模式——裝飾者模式</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3473744.html">[head first設計模式]山西面館中的設計模式——觀察者模式</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3475061.html">[head first設計模式]山西面館中的設計模式——建造者模式</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3485805.html">[head first設計模式]餃子館(冬至)中的設計模式——工廠模式</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3489549.html">[head first設計模式]一個人的平安夜——單例模式</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3514935.html">[head first設計模式]搶票中的設計模式——代理模式</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3518013.html">[head first設計模式]面向對象的3特征5原則</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3534573.html">[head first設計模式]鴨子模型——政策模式</a>
<a href="http://www.cnblogs.com/wolf-sun/p/3543398.html">[head first設計模式]雲南米線館中的設計模式——模版方法模式</a>
這裡采用書中餐廳訂餐的例子。餐廳訂餐的例子還是比較簡單的,也比較好了解,書中的遙控器的例子,太長了,能把人繞暈,圖1:
圖2:
從餐廳到指令模式
command:
定義指令的接口,聲明執行的方法。
concretecommand:
具體的指令, 實作指令接口;通常會持有接收者,并調用接收者的功能來完成指令要執行的操作。
receiver:
接收者,真正執行指令的對象。任何類都可能成為一個接收者,隻要它能夠實作指令要求實作的相應功能。
invoker:
要求指令對象執行請求,通常會持有指令對象,可以持有很多的指令對象。這個是用戶端真正觸發指令并要求指令執行相應操作的地方,也就是說相當于使用指令對象的入口。
client:
建立具體的指令對象,并且設定指令對象的接收者。注意這個不是我們正常意義上的用戶端,而是在組裝指令對象和接收者,或許,把這個client稱為裝配者會更好了解,因為真正使用指令的用戶端是從invoker來觸發執行。
這裡采用從執行個體到定義,倒着描述的方式,先從執行個體入手,有個大緻印象,有助于了解。
将“請求”封裝成對象,以便使用不同的請求、隊列或者日志來參數化其它對象。指令模式也支援可撤銷的操作。
分析:帥哥顧客,土豪訂單,美女服務員,資深大廚的角色是什麼?
帥哥顧客:client
土豪訂單:實作command接口的具體command
美女服務員:invoker
資深大廚:receiver
代碼實作:
command接口
ordercommand:具體的指令,繼承自command抽象類
waitor:invoker調用者,seniorchef:接收者 廚師類
訂單order,封裝訂單内容,然後傳入ordercommand,将訂單對象變為指令對象
測試端program相當于client角色
測試結果:
指令模式優點:
1.降低對象之間的耦合度。
2.新的指令可以很容易地加入到系統中。
3.可以比較容易地設計一個組合指令。
4.調用同一方法實作不同的功能
缺點:
使用指令模式可能會導緻某些系統有過多的具體指令類。因為針對每一個指令都需要設計一個具體指令類,是以某些系統可能需要大量具體指令類,這将影響指令模式的使用。
适用環境:
1.系統需要将請求調用者和請求接收者解耦,使得調用者和接收者不直接互動。
2.系統需要在不同的時間指定請求、将請求排隊和執行請求。
3.系統需要支援指令的撤銷(undo)操作和恢複(redo)操作。
4.系統需要将一組操作組合在一起,即支援宏指令。
今天在家研究了一天指令模式,以上為個人了解,如有不妥之處,請指出,一起交流學習,謝謝。
參考:
head first 設計模式
百度百科
部落格位址:
<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>
部落格版權:
本文以學習、研究和分享為主,歡迎轉載,但必須在文章頁面明顯位置給出原文連接配接。
如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起讨論,共同進步!
再次感謝您耐心的讀完本篇文章。
轉載:http://www.cnblogs.com/wolf-sun/p/3618911.html