您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Java行為型設計模式之策略模式怎么實現”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java行為型設計模式之策略模式怎么實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
策略(Strategy)模式:該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。策略模式屬于對象行為模式,它通過對算法進行封裝,把使用算法的責任和算法的實現分割開來,并委派給不同的對象對這些算法進行管理。
策略模式的主要優點:
多重條件語句不易維護,而使用策略模式可以避免使用多重條件語句,如 if…else 語句、switch…case 語句。
策略模式提供了一系列的可供重用的算法族,恰當使用繼承可以把算法族的公共代碼轉移到父類里面,從而避免重復的代碼。
策略模式可以提供相同行為的不同實現,客戶可以根據不同時間或空間要求選擇不同的。
策略模式提供了對開閉原則的完美支持,可以在不修改原代碼的情況下,靈活增加新算法。
策略模式把算法的使用放到環境類中,而算法的實現移到具體策略類中,實現了二者的分離。
策略設計模式的不足:
客戶端必須理解所有策略算法的區別,以便適時選擇恰當的算法類。
策略模式造成很多的策略類,增加維護難度。
策略模式是準備一組算法,并將這組算法封裝到一系列的策略類里面,作為一個抽象策略類的子類。策略模式的重心不是如何實現算法,而是如何組織這些算法,從而讓程序結構更加靈活,具有更好的維護性和擴展性。
策略設計模式涉及的角色:
抽象策略(Strategy)類:定義了一個公共接口,各種不同的算法以不同的方式實現這個接口,環境角色使用這個接口調用不同的算法,一般使用接口或抽象類實現。
具體策略(Concrete Strategy)類:實現了抽象策略定義的接口,提供具體的算法實現。
環境(Context)類:持有一個策略類的引用,最終給客戶端調用。
/** * 折扣 */ public interface Discount { /** * 計算價格 * @param money * @return */ public int calculate(int money); } /** * 滿減策略 * 需要滿200 */ public class FullDiscount implements Discount{ @Override public int calculate(int money) { if (money>200){ System.out.println("符合滿減策略,進行滿減"); return money - 30; } return money; } } /** * 假日折扣 * 需要大于100 */ public class HolidayDiscount implements Discount{ @Override public int calculate(int money) { if (money > 100){ return money - 10; } return money; } } /** * 新用戶減免 * 但是也需要大于100 */ public class NewerDiscount implements Discount{ @Override public int calculate(int money) { if (money>100){ return money-20; } return money; } } /** * 第二單8折優惠 */ public class SecondDiscount implements Discount { @Override public int calculate(int money) { Double balance = money * 0.8; return balance.intValue(); } } public static void main(String[] args) { List<Fruit> products = new ArrayList(); products.add(StaticFactory.getFruitApple()); products.add(StaticFactory.getFruitBanana()); products.add(StaticFactory.getFruitOrange()); ShoppingCart cart = new CartShopping(products); /*注入優惠方案*/ cart.setDiscount(new FullDiscount()); cart.submitOrder(); }
在程序設計中,通常在以下幾種情況中使用策略模式較多:
一個系統需要動態地在幾種算法中選擇一種時,可將每個算法封裝到策略類中。
一個類定義了多種行為,并且這些行為在這個類的操作中以多個條件語句的形式出現,可將每個條件分支移入它們各自的策略類中以代替這些條件語句。
系統中各算法彼此完全獨立,且要求對客戶隱藏具體算法的實現細節時。
系統要求使用算法的客戶不應該知道其操作的數據時,可使用策略模式來隱藏與算法相關的數據結構。
多個類只區別在表現行為不同,可以使用策略模式,在運行時動態選擇具體要執行的行為。
讀到這里,這篇“Java行為型設計模式之策略模式怎么實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。