Java中除去有設計原則之外,還有23中設計模式。
這些模式都是前輩們一點一點積累下來,一直在改進,一直在優化的,而這些設計模式可以解決一些特定的問題。
并且在這些模式中,可以說是将語言的使用展現的淋漓盡緻。
那我們今天要學習 行為型模式 中的 指令模式 !
指令模式
先來百科一下,什麼叫指令模式
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB10MNR0T3tGVOBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5UzM3IzNyETM4IDMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
百科很簡單的就介紹完了,它就是以物件代替行動,具體怎麼了解,我們舉個生活中的小例子
你用鍵盤去按字母打字就是屬于指令模式,它是使用鍵盤去代表你的操作(輸入文字)
指令模式的定義與特點
指令(Command)模式的定義如下:将一個請求封裝為一個對象,使送出請求的責任和執行請求的責任分割開。
這個其實就是由物件去實作我們想要的功能
指令模式的主要優點如下。
1. 降低系統的耦合度。指令模式能将調用操作的對象與實作該操作的對象解耦。
2. 增加或删除指令非常友善。采用指令模式增加與删除指令不會影響其他類,它滿足“開閉原則”,對擴充比較靈活。
其缺點是:可能産生大量具體指令類。因為計對每一個具體操作都需要設計一個具體指令類,這将增加系統的複雜性。
指令模式的結構與實作
先說一下指令模式中我們要用到的一些角色
1. 抽象指令類角色:聲明執行指令的接口,擁有執行指令的抽象方法 execute()。
2. 具體指令角色:是抽象指令類的具體實作類,它擁有接收者對象,并通過調用接收者的功能來完成指令要執行的操作。
3. 實作者/接收者角色:執行指令功能的相關操作,是具體指令對象業務的真正實作者。
4. 調用者/請求者角色:是請求的發送者,它通常擁有很多的指令對象,并通過通路指令對象來執行相關請求,它不直接通路接收者。
大概知道了這些角色,我們就可以用這去模拟一下我們上面的鍵盤輸入問題的這個事情了
第一步:
我們先定義一下抽象指令類角色,這個隻有一個抽象方法,那就是 execute()
、
第二步:
有了抽象指令還不行,我們還需要有具體的執行,這個就是我們以後要擴充的類,因為鍵盤上有那麼多字母,我們隻需要一個一個實作即可
當然,隻有這個是沒有用的,我們還需要一個接受者,這個是用來最後做操作的,如果不懂可以再看一下上面的角色定義
然後我們回到 LetterA 這類,将接受者定義到裡面去
第三步:
最後,我們再去定義一個調用者,這個其實就是我們人了,然後去按鍵盤
當然,這裡我們可以不去使用構造函數,我們可以弄一個 get/set 方法,動态的指派
測試:
我們弄一個測試類,測試一下
執行一下
大家可以把剛剛的指令的調用者修改成 get/set 的方式,動态的注入 Letter ,這樣就可以省去建立對象了。
OK,就到這裡,大家好好看一下。多多練習。有問題可以聯系我QQ:2100363119
歡迎大家通路我的個人網站:lemon1234.com 感謝大家留言