Java設計模式(二):策略模式

策略模式(strategy pattern)

策略模式(strategy pattern):屬於對象的行爲模式。策略模式定義了一系列的算法,並將每個算法封裝起來,讓他們之間可以相互轉換,該模式讓算法的變化,不會影響到使用算法的客戶。


策略模式UML圖

策略模式是對算法的包裝,是把使用算法的責任和算法本身分割開來,委派給不同的對象管理。策略模式通常把一個系列的算法包裝到一系列的策略類裏面,作爲一個抽象策略類的子類。用一句話來說,就是:準備一組算法,並將每一個算法封裝起來,使得它們可以互換。

Java設計模式(二):策略模式


策略模式涉及到的三個角色:

環境(Context)角色:該角色中實現了對抽象策略中定義的接口或者抽象類的引用。抽象策略(Strategy)角色:這是一個抽象角色,通常由一個接口或抽象類實現。此角色給出所有的具體策略類所需的接口。具體策略(ConcreteStrategy)角色:包裝了相關的算法或行爲。


策略模式的意義:

從概念上來看,所有這些算法完成的都是相同的工作,只是實現不同,它可以以相同的方式調用所有的算法,減少了各種算法類與使用算法類之間的耦合,低耦合的特性使軟件具有更強的可擴展性,易於維護;更重要的是,它大大提高了軟件的可重用性。


示例代碼

抽象策略接口 Strategy

Java設計模式(二):策略模式

Java

具體算法類A ConcreteStrategyA

Java設計模式(二):策略模式

Java

具體算法類B ConcreteStrategyB

Java設計模式(二):策略模式

Java

具體算法類C ConcreteStrategyC

Java設計模式(二):策略模式

Java

環境類 Context

Java設計模式(二):策略模式

Java

客戶端測試類 TestStrategyPattern

Java設計模式(二):策略模式

Java


策略模式的使用場景

例如超市或者商場會不定期的搞一些促銷活動,活動分爲多種形式,如針對不同商品的折扣力度不一樣,有的打八折,有的五折;另外一些又使用滿減的方式,如滿300減100。而且這類的促銷活動每次都不是固定的。針對這種場景我們就可以使用策略模式。

  • 策略模式的重心不是如何實現算法,而是如何組織、調用這些算法,從而讓程序結構更靈活,具有更好的維護性和擴展性。


策略模式的優點

(1)策略模式提供了管理相關的算法族的辦法。策略類的等級結構定義了一個算法或行爲族。恰當使用繼承可以把公共的代碼移到父類裏面,從而避免代碼重複。

(2)使用策略模式可以避免使用多重條件(if-else)語句。多重條件語句不易維護,它把採取哪一種算法或採取哪一種行爲的邏輯與算法或行爲的邏輯混合在一起,統統列在一個多重條件語句裏面,比使用繼承的辦法還要原始和落後。


策略模式的缺點

(1)客戶端必須知道所有的策略類,並自行決定使用哪一個策略類。這就意味着客戶端必須理解這些算法的區別,以便適時選擇恰當的算法類。換言之,策略模式只適用於客戶端知道算法或行爲的情況。

(2)由於策略模式把每個具體的策略實現都單獨封裝成爲類,如果備選的策略很多的話,那麼對象的數目就會很可觀。

以上所述是小編給大家介紹的Spring Boot 模塊組成,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的!

Java學習資料(複製下段鏈接至瀏覽器即可)

data:textml;charset=UTF-8;base64,5oGt5Zac5L2g77yM5p625p6E5biI5a2m5Lmg576k5Y+35pivNjg2NTc5MDE0Cg==

Java設計模式(二):策略模式

Java

Java學習資料獲取(複製下段連接至瀏覽器即可)
data:text/html;charset=UTF-8;base64,5oGt5Zac5L2g77yM5p625p6E5biI5a2m5Lmg576k5Y+35pivNjg2NTc5MDE0Cg==

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章