日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java通俗易懂系列設計模式之策略模式

瀏覽:11日期:2022-08-13 18:09:37
介紹

策略設計模式是行為設計模式之一。當我們為特定任務使用多個算法時,使用策略模式,客戶端決定在運行時使用的實際實現。

Java通俗易懂系列設計模式之策略模式

策略模式的最佳示例之一是Collections.sort()采用Comparator參數的方法。基于Comparator接口的不同實現,對象將以不同的方式進行排序。

實例

對于我們的示例,我們將嘗試實施一個簡單的購物車,我們有兩種付款策略 - 使用信用卡或使用PayPal。

首先,我們將為我們的策略模式示例創建接口,在我們的例子中,支付金額作為參數傳遞。支付方式:PaymentStrategy.java

package com.journaldev.design.strategy;public interface PaymentStrategy {public void pay(int amount);}

現在我們將不得不使用信用卡/借記卡或通過PayPal為支付創建具體的算法實現。

信用卡付款:CreditCardStrategy.java

package com.journaldev.design.strategy;public class CreditCardStrategy implements PaymentStrategy {private String name;private String cardNumber;private String cvv;private String dateOfExpiry;public CreditCardStrategy(String nm, String ccNum, String cvv, String expiryDate){this.name=nm;this.cardNumber=ccNum;this.cvv=cvv;this.dateOfExpiry=expiryDate;}@Overridepublic void pay(int amount) {System.out.println(amount +' paid with credit/debit card');}}

Paypal付款:PaypalStrategy.java

package com.journaldev.design.strategy;public class PaypalStrategy implements PaymentStrategy {private String emailId;private String password;public PaypalStrategy(String email, String pwd){this.emailId=email;this.password=pwd;}@Overridepublic void pay(int amount) {System.out.println(amount + ' paid using Paypal.');}}

現在我們的策略模式示例算法準備好了。我們可以實施購物車和付款方式將需要輸入作為付款策略。

package com.journaldev.design.strategy;public class Item {private String upcCode;private int price;public Item(String upc, int cost){this.upcCode=upc;this.price=cost;}public String getUpcCode() {return upcCode;}public int getPrice() {return price;}}

ShoppingCart.java

package com.journaldev.design.strategy;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.List;public class ShoppingCart {//List of itemsList<Item> items;public ShoppingCart(){this.items=new ArrayList<Item>();}public void addItem(Item item){this.items.add(item);}public void removeItem(Item item){this.items.remove(item);}public int calculateTotal(){int sum = 0;for(Item item : items){sum += item.getPrice();}return sum;}public void pay(PaymentStrategy paymentMethod){int amount = calculateTotal();paymentMethod.pay(amount);}}

請注意,購物車的付款方式需要付款算法作為參數,并且不會將其作為實例變量存儲在任何位置。

讓我們用一個簡單的程序測試我們的策略模式示例設置。

ShoppingCartTest.java

package com.journaldev.design.strategy;public class ShoppingCartTest {public static void main(String[] args) {ShoppingCart cart = new ShoppingCart();Item item1 = new Item('1234',10);Item item2 = new Item('5678',40);cart.addItem(item1);cart.addItem(item2);//pay by paypalcart.pay(new PaypalStrategy('myemail@example.com', 'mypwd'));//pay by credit cardcart.pay(new CreditCardStrategy('Pankaj Kumar', '1234567890123456', '786', '12/15'));}}

上述程序的輸出是:

50 paid using Paypal.

50 paid with credit/debit card

類圖

Java通俗易懂系列設計模式之策略模式

總結

我們可以使用組合為策略創建實例變量,但我們應該避免這種情況,因為我們希望將特定策略應用于特定任務。在Collections.sort()和Arrays.sort()方法中遵循相同的方法,將比較器作為參數。

策略模式與狀態模式(State Pattern)非常相似。其中一個區別是Context包含狀態作為實例變量,并且可以有多個任務,其實現可以依賴于狀態,而策略模式策略作為參數傳遞給方法,上下文對象沒有任何變量來存儲它。

當我們為特定任務提供多個算法時,策略模式很有用,我們希望我們的應用程序可以靈活地在運行時為特定任務選擇任何算法。

優點:1、算法可以自由切換。2、避免使用多重條件判斷。3、擴展性良好。 缺點:1、策略類會增多。 2、所有策略類都需要對外暴露。 主要解決:在有多種算法相似的情況下,使用 if...else 所帶來的復雜和難以維護。 何時使用:一個系統有許多許多類,而區分它們的只是他們直接的行為。 如何解決:將這些算法封裝成一個一個的類,任意地替換。 關鍵代碼:實現同一個接口。 使用場景: 1、如果在一個系統里面有許多類,它們之間的區別僅在于它們的行為,那么使用策略模式可以動態地讓一個對象在許多行為中選擇一種行為。 2、一個系統需要動態地在幾種算法中選擇一種。 3、如果一個對象有很多的行為,如果不用恰當的模式,這些行為就只好使用多重的條件選擇語句來實現。 注意事項:如果一個系統的策略多于四個,就需要考慮使用混合模式,解決策略類膨脹的問題。

以上就是Java通俗易懂系列設計模式之策略模式的詳細內容,更多關于Java設計模式的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一级久久| 国产91欧美| 久久精品国产68国产精品亚洲| 亚洲一级黄色| 91精品观看| 亚洲aa在线| 国产亚洲一区二区三区啪| 国产精品一区二区三区美女 | 国产99精品一区| 成人啊v在线| 国内自拍视频一区二区三区| 狠狠爱成人网| 久久久精品网| 久久久精品五月天| 五月婷婷六月综合| 亚洲一区二区免费看| 日韩影院免费视频| 蜜臀久久久久久久| 亚洲婷婷免费| 久久精品动漫| 成人在线超碰| 免费一二一二在线视频| 97精品国产一区二区三区| 国产91在线播放精品| 国产欧美高清视频在线| 日韩福利视频网| 久久三级视频| 中文精品视频| 麻豆精品新av中文字幕| 亚洲香蕉网站| 免费看欧美美女黄的网站| 日韩精彩视频在线观看| xxxxx性欧美特大| 日韩中文字幕一区二区高清99| 久久精品国产999大香线蕉| 免费观看亚洲| 日韩亚洲精品在线观看| 久久久一本精品| 日韩1区2区日韩1区2区| 久久久久久一区二区| 亚洲一区国产| 日韩高清三区| 99国产精品免费视频观看| 日本亚洲欧美天堂免费| 久久精选视频| 国产日韩中文在线中文字幕| 欧洲一级精品| 国产精品qvod| 免费观看在线综合色| 精品国产不卡| 夜夜精品视频| 久久中文字幕导航| 婷婷久久一区| 国产一区二区三区四区五区| 玖玖玖国产精品| 亚欧成人精品| 久久爱www.| 欧美日韩国产高清电影| 日本视频一区二区| 精品一区欧美| 天堂а√在线最新版中文在线| 亚洲主播在线| 国产精品蜜芽在线观看| 国产精品午夜av| 综合精品一区| 在线视频日韩| 激情婷婷亚洲| 亚洲成人av观看| 精品视频网站| 麻豆一区在线| 国产精品视频一区二区三区| 国产综合精品| 成人午夜国产| 日韩精品91| 亚洲三级欧美| а√天堂中文在线资源8| 国产精品**亚洲精品| 日本精品在线播放| 99香蕉国产精品偷在线观看 | 久久久五月天| 欧美亚洲日本精品| 国产一区精品福利| 国产香蕉精品| 日本在线成人| 日韩精品麻豆| 桃色一区二区| 国产aⅴ精品一区二区四区| 综合国产精品| 五月婷婷亚洲| 国产精品久久久久久久久久白浆| 亚洲日本国产| 国产一级久久| 国产91精品对白在线播放| 精品女同一区二区三区在线观看| 欧美精品观看| 日本不卡视频一二三区| 激情五月色综合国产精品| 欧美国产美女| 久久99久久人婷婷精品综合| 成人精品亚洲| 成人av三级| 成人久久久久| 亚洲电影有码| 欧美久久天堂| 中文字幕在线视频网站| 欧美精品福利| 日韩中文字幕在线一区| 日本va欧美va欧美va精品| 色综合视频一区二区三区日韩 | 亚洲精品在线影院| 久久中文欧美| а√天堂8资源在线| 亚洲狼人精品一区二区三区| 91精品啪在线观看国产爱臀| 综合亚洲自拍| 国产三级精品三级在线观看国产| 麻豆免费精品视频| 激情欧美国产欧美| 久久亚洲精品伦理| 日本少妇精品亚洲第一区| 国产欧美一区二区精品久久久| 国产女人18毛片水真多18精品| 国产一区精品福利| 午夜久久免费观看| 日韩精品免费一区二区夜夜嗨| 国产精品亚洲片在线播放| 日韩欧美另类一区二区| 蜜桃av.网站在线观看| 99亚洲精品| 国产精品久久久一区二区| 色婷婷久久久| 日韩黄色av| 欧美日韩免费观看视频| 中文字幕日韩高清在线| 国产成人久久精品麻豆二区| 好看的亚洲午夜视频在线| 国产九一精品| 午夜久久久久| 免费日韩一区二区三区| 宅男在线一区| 欧美片网站免费| 国产综合精品| 日韩在线成人| 91精品久久久久久久久久不卡| 日本中文字幕一区二区| 欧美成人精品三级网站| 18国产精品| 欧美69视频| 久久精品日韩欧美| 蜜臀久久99精品久久久画质超高清 | 欧美日韩精品在线一区| 水野朝阳av一区二区三区| 国产一区二区三区网| 91九色精品| 美女精品一区二区| 国产不卡人人| 日韩美女精品| 亚洲伊人av| 尤物在线精品| 亚洲在线电影| 亚洲精品大全| 水蜜桃精品av一区二区| 亚洲一二av| 免费精品一区| 久久av一区| 日本亚洲最大的色成网站www| 久久青青视频| 欧美片网站免费| 99视频一区| 日韩在线欧美| 欧美国产日本| 亚洲日本免费电影| 欧美日韩精品在线一区| 国产精品一区二区精品| 亚洲在线网站| 国产精品激情电影| 日韩在线观看不卡| 久久99蜜桃| 日韩av不卡在线观看| 久热综合在线亚洲精品| 97精品在线| 欧美激情麻豆| 欧美亚洲福利| 99精品美女| 日韩高清欧美激情| 一区二区视频欧美| 国产高清不卡| 精品一区二区三区的国产在线观看| 一本综合精品| 视频一区视频二区在线观看| 亚洲大全视频| 成人日韩在线| 亚洲啊v在线| 日本久久精品| 精品国产乱码久久久久久樱花| 奇米亚洲欧美| 少妇精品在线| 日韩一区二区三免费高清在线观看 | 欧美日韩精品一区二区视频| 91亚洲国产成人久久精品|