您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java中策略設計模式的實現方法及應用場景是什么”,在日常操作中,相信很多人在Java中策略設計模式的實現方法及應用場景是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java中策略設計模式的實現方法及應用場景是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Java策略模式(Strategy Pattern)是一種行為設計模式,它允許再運行時動態選擇算法的行為.策略模式通過將算法封裝在可互換的策略對象中,使得客戶端代碼能夠輕松地切換算法,而無需修改原始代碼.在策略模式中,每個算法都被實現為一個單獨的策略類,這些策略類都實現了相同的接口,從而允許它們在運行時互相替換.
在Java中,可以使用接口或抽象類來定義策略接口.然后對于每個算法,都可以創建一個具體的實現類來實現這個接口.客戶端代碼可以通過將不同的策略對象傳遞給上下文對象來選擇不同的算法.
Java策略模式通常包括以下三種角色:
Context(上下文):是策略模式中的核心類,用來管理具體策略實現類的創建,配置和執行,以及在運行時動態地選擇具體的策略實現類.
Strategy(策略):是一個接口或抽象類,定義了策略實現類的通用方法和屬性,具體策略實現類必須實現這些方法和屬性.
ConcreteStrategy(具體策略):是策略接口的實現類,根據具體業務需求實現了策略接口定義的方法和屬性.可以又多個具體策略實現類,Context類在運行時根據需要動態地選擇具體的策略實現類.
支付策略接口(Strategy)
public interface PaymentStrategy { /** * 支付 * * @param amount */ void pay(double amount); }
微信支付和支付寶支付(ConcreteStrategy)
public class WechatPayment implements PaymentStrategy { private String username; private String password; public WechatPayment(String username, String password) { this.username = username; this.password = password; } /** * 支付 * * @param amount */ @Override public void pay(double amount) { System.out.println("微信支付:" + amount + "元"); } } public class AliPayment implements PaymentStrategy{ private String username; private String password; public AliPayment(String username, String password) { this.username = username; this.password = password; } /** * 支付 * * @param amount */ @Override public void pay(double amount) { System.out.println("支付寶支付:" + amount + "元"); } }
購物車類(Context)
public class ShoppingCart { private List<Item> itemList; private PaymentStrategy paymentStrategy; public ShoppingCart() { itemList = new ArrayList<>(); } public void setPaymentStrategy(PaymentStrategy paymentStrategy) { this.paymentStrategy = paymentStrategy; } public void addItem(Item item){ itemList.add(item); } public void removeItem(Item item){ itemList.remove(item); } public double calculateTotal(){ return itemList.stream().mapToDouble(Item::getPrice).sum(); } public void pay(){ paymentStrategy.pay(calculateTotal()); } }
商品類
@Data public class Item { private String name; private double price; public Item(String name, double price) { this.name = name; this.price = price; } }
測試
public class Demo { public static void main(String[] args) { ShoppingCart shoppingCart = new ShoppingCart(); Item item1 = new Item("item1",10); Item item2 = new Item("item2",10); shoppingCart.addItem(item1); shoppingCart.addItem(item2); shoppingCart.setPaymentStrategy(new AliPayment("aliPayUsername","aliPayPassword")); shoppingCart.pay(); shoppingCart.setPaymentStrategy(new WechatPayment("wechatUsername","wechatPassword")); shoppingCart.pay(); } }
上面代碼演示了一個簡單的策略模式實現.我們定義了一個PaymentStrategy接口,它表示所有支付方式的共同操作.我們還定義了兩個實現該接口的具體類AliPayment和WechatPayment,它們分別表示使用支付寶和微信支付的操作.我們還定義了一個ShoppingCart類,該類使用PaymentStrategy接口來表示支付方式,并根據需要切換實際的支付方式.
在我們的Demo類中,我們創建了一個ShoppingCart對象,并添加了兩個Item對象,我們然后選擇使用AliPayment進行支付,并調用pay()方法.我們接下來又選擇使用WechatPayment進行支付,并再次調用pay()方法.
這樣,我們就可以輕松地在不同的支付方式之間進行切換,并根據需要添加新的支付方式.
到此,關于“Java中策略設計模式的實現方法及應用場景是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。