Java中的策略设计模式
策略設計模式是一種行為模式,其中我們有多種算法/策略來完成一項任務,所使用的算法/策略留給客戶選擇。 各種算法選項封裝在單獨的類中。
在本教程中,我們將學習在Java中實現策略設計模式。
UML表示形式:
首先,我們來看一下策略設計模式的UML表示形式:
在這里,我們有:
- 策略:定義我們打算執行的常見操作的界面
- ConcreteStrategy:這些是使用不同算法來執行Strategy界面中定義的操作的實現類
- 背景:任何需要改變行為并提及策略的事物
JDK中策略模式的一個流行示例是Collections.sort()方法中java.util.Comparator的用法。 我們可以將Collections.sort()方法視為上下文,并將其作為傳遞對象排序策略的java.util.Comparator實例。
實施策略模式:
眾所周知,任何購物網站都提供多種付款方式。 因此,讓我們使用此示例來實現策略模式。
我們將首先定義我們的PaymentStrategy接口:
public interface PaymentStrategy { void pay(Shopper shopper); }現在,讓我們定義兩種最常見的付款方式,即貨到付款和卡付款,作為兩種具體的策略類:
public class CashOnDeliveryStrategy implements PaymentStrategy { @Override public void pay(Shopper shopper) { double amount = shopper.getShoppingCart().getTotal(); System.out.println(shopper.getName() + " selected Cash On Delivery for Rs." + amount ); } } ? public class CardPaymentStrategy implements PaymentStrategy { @Override public void pay(Shopper shopper) { CardDetails cardDetails = shopper.getCardDetails(); double amount = shopper.getShoppingCart().getTotal(); completePayment(cardDetails, amount); System.out.println( "Credit/Debit card Payment of Rs. " + amount + " made by " + shopper.getName()); } ?private void completePayment(CardDetails cardDetails, double amount) { ... } }實施上下文:
定義了策略類之后,現在讓我們定義一個PaymentContext類:
public class PaymentContext { ?private PaymentStrategy strategy; ?public PaymentContext(PaymentStratgey strategy) { this .strategy = strategy; } ?public void makePayment(Shopper shopper) { this .strategy.pay(shopper); } }同樣,我們的Shopper類看起來類似于:
public class Shopper { ?private String name; private CardDetails cardDetails; private ShoppingCart shoppingCart; ?//suitable constructor , getters and setters ????public void addItemToCart(Item item) { this .shoppingCart.add(item); } ?public void payUsingCOD() { PaymentContext pymtContext = new PaymentContext( new CashOnDeliveryStrategy()); pymtContext.makePayment( this ); } ?public void payUsingCard() { PaymentContext pymtContext = new PaymentContext( new CardPaymentStrategy()); pymtContext.makePayment( this ); } }我們系統中的購物者可以使用一種可用的購買策略進行付款。 在我們的示例中,我們的PaymentContext類接受所選的支付策略,然后為該策略調用pay()方法。
策略與狀態設計模式:
策略和狀態設計模式都是基于接口的模式,可能看起來相似,但有一些重要區別:
- 狀態設計模式定義了各種狀態,其中策略模式更多地討論了不同的算法
- 在狀態模式中,存在從一種狀態到另一種狀態的過渡。 另一方面,策略模式中的所有策略類都是相互獨立的
請隨時探索狀態設計模式 。
結論:
通過此快速教程,我們現在知道如何實現策略設計模式。
它是最常用的設計模式之一,并遵循“ 打開/關閉”原則 。 因此,要添加新策略,我們可以簡單地創建一個額外的策略類。 但是,請注意,我們必須在這里更新客戶端代碼,因為客戶端選擇了要調用的策略。
翻譯自: https://www.javacodegeeks.com/2019/09/strategy-design-pattern-java.html
總結
以上是生活随笔為你收集整理的Java中的策略设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 反射选择器表达式
- 下一篇: 禽类是什么意思 禽类指什么样的动物