天天看點

Java23種設計模式——15.行為型模式之指令模式指令模式指令模式的定義與特點指令模式的結構與實作

Java中除去有設計原則之外,還有23中設計模式。

這些模式都是前輩們一點一點積累下來,一直在改進,一直在優化的,而這些設計模式可以解決一些特定的問題。

并且在這些模式中,可以說是将語言的使用展現的淋漓盡緻。

那我們今天要學習  行為型模式  中的  指令模式  !

指令模式

先來百科一下,什麼叫指令模式

Java23種設計模式——15.行為型模式之指令模式指令模式指令模式的定義與特點指令模式的結構與實作

百科很簡單的就介紹完了,它就是以物件代替行動,具體怎麼了解,我們舉個生活中的小例子

你用鍵盤去按字母打字就是屬于指令模式,它是使用鍵盤去代表你的操作(輸入文字)

指令模式的定義與特點

指令(Command)模式的定義如下:将一個請求封裝為一個對象,使送出請求的責任和執行請求的責任分割開。

這個其實就是由物件去實作我們想要的功能

指令模式的主要優點如下。

1. 降低系統的耦合度。指令模式能将調用操作的對象與實作該操作的對象解耦。

2. 增加或删除指令非常友善。采用指令模式增加與删除指令不會影響其他類,它滿足“開閉原則”,對擴充比較靈活。

其缺點是:可能産生大量具體指令類。因為計對每一個具體操作都需要設計一個具體指令類,這将增加系統的複雜性。

指令模式的結構與實作

先說一下指令模式中我們要用到的一些角色

1. 抽象指令類角色:聲明執行指令的接口,擁有執行指令的抽象方法 execute()。

2. 具體指令角色:是抽象指令類的具體實作類,它擁有接收者對象,并通過調用接收者的功能來完成指令要執行的操作。

3. 實作者/接收者角色:執行指令功能的相關操作,是具體指令對象業務的真正實作者。

4. 調用者/請求者角色:是請求的發送者,它通常擁有很多的指令對象,并通過通路指令對象來執行相關請求,它不直接通路接收者。

大概知道了這些角色,我們就可以用這去模拟一下我們上面的鍵盤輸入問題的這個事情了

第一步:

我們先定義一下抽象指令類角色,這個隻有一個抽象方法,那就是 execute()

Java23種設計模式——15.行為型模式之指令模式指令模式指令模式的定義與特點指令模式的結構與實作

第二步:

有了抽象指令還不行,我們還需要有具體的執行,這個就是我們以後要擴充的類,因為鍵盤上有那麼多字母,我們隻需要一個一個實作即可

Java23種設計模式——15.行為型模式之指令模式指令模式指令模式的定義與特點指令模式的結構與實作

當然,隻有這個是沒有用的,我們還需要一個接受者,這個是用來最後做操作的,如果不懂可以再看一下上面的角色定義

Java23種設計模式——15.行為型模式之指令模式指令模式指令模式的定義與特點指令模式的結構與實作

然後我們回到 LetterA 這類,将接受者定義到裡面去

Java23種設計模式——15.行為型模式之指令模式指令模式指令模式的定義與特點指令模式的結構與實作

第三步:

最後,我們再去定義一個調用者,這個其實就是我們人了,然後去按鍵盤

Java23種設計模式——15.行為型模式之指令模式指令模式指令模式的定義與特點指令模式的結構與實作

當然,這裡我們可以不去使用構造函數,我們可以弄一個 get/set 方法,動态的指派

測試:

我們弄一個測試類,測試一下

Java23種設計模式——15.行為型模式之指令模式指令模式指令模式的定義與特點指令模式的結構與實作

執行一下

Java23種設計模式——15.行為型模式之指令模式指令模式指令模式的定義與特點指令模式的結構與實作

大家可以把剛剛的指令的調用者修改成 get/set 的方式,動态的注入 Letter ,這樣就可以省去建立對象了。

OK,就到這裡,大家好好看一下。多多練習。有問題可以聯系我QQ:2100363119

歡迎大家通路我的個人網站:lemon1234.com 感謝大家留言

繼續閱讀