天天看點

[Head First設計模式]餐館中的設計模式——指令模式

<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:

[Head First設計模式]餐館中的設計模式——指令模式

圖2:

[Head First設計模式]餐館中的設計模式——指令模式

從餐廳到指令模式

[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式

command:

        定義指令的接口,聲明執行的方法。

concretecommand:

       具體的指令, 實作指令接口;通常會持有接收者,并調用接收者的功能來完成指令要執行的操作。

receiver:

        接收者,真正執行指令的對象。任何類都可能成為一個接收者,隻要它能夠實作指令要求實作的相應功能。

invoker:

        要求指令對象執行請求,通常會持有指令對象,可以持有很多的指令對象。這個是用戶端真正觸發指令并要求指令執行相應操作的地方,也就是說相當于使用指令對象的入口。

client:

        建立具體的指令對象,并且設定指令對象的接收者。注意這個不是我們正常意義上的用戶端,而是在組裝指令對象和接收者,或許,把這個client稱為裝配者會更好了解,因為真正使用指令的用戶端是從invoker來觸發執行。

這裡采用從執行個體到定義,倒着描述的方式,先從執行個體入手,有個大緻印象,有助于了解。

将“請求”封裝成對象,以便使用不同的請求、隊列或者日志來參數化其它對象。指令模式也支援可撤銷的操作。

分析:帥哥顧客,土豪訂單,美女服務員,資深大廚的角色是什麼?

帥哥顧客:client

土豪訂單:實作command接口的具體command

美女服務員:invoker

資深大廚:receiver

代碼實作:

command接口

[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式

ordercommand:具體的指令,繼承自command抽象類

[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式

waitor:invoker調用者,seniorchef:接收者 廚師類

[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式

訂單order,封裝訂單内容,然後傳入ordercommand,将訂單對象變為指令對象

[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式

測試端program相當于client角色

[Head First設計模式]餐館中的設計模式——指令模式
[Head First設計模式]餐館中的設計模式——指令模式

測試結果:

[Head First設計模式]餐館中的設計模式——指令模式

指令模式優點:

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