成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

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

策略設計模式是行為設計模式之一。當我們?yōu)樘囟ㄈ蝿帐褂枚鄠€算法時,使用策略模式,客戶端決定在運行時使用的實際實現(xiàn)。

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

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

實例

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

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

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

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

信用卡付款: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.');}}

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

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);}}

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

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

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通俗易懂系列設計模式之策略模式

總結

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

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

當我們?yōu)樘囟ㄈ蝿仗峁┒鄠€算法時,策略模式很有用,我們希望我們的應用程序可以靈活地在運行時為特定任務選擇任何算法。

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

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

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
99久久99久久精品免费看蜜桃| 欧美日韩中文字幕一区| 久久亚洲国产精品一区二区| 最新欧美精品一区二区三区| 欧美成人有码| 久久久九九九九| av在线不卡观看免费观看| 欧美精品vⅰdeose4hd| 久久激情综合网| 亚洲在线播放电影| 亚洲国产aⅴ天堂久久| 亚洲综合国产激情另类一区| 亚洲一区二区中文在线| 国产精品永久入口久久久| 亚洲精品欧美专区| 国产欧美一区二区三区国产幕精品| 亚洲另类色综合网站| 亚洲激情在线| 一区二区久久久久| 香蕉亚洲视频| 日韩av二区在线播放| 欧洲在线/亚洲| 老司机免费视频一区二区三区| 欧美日韩在线播| 国内一区二区在线| 9191精品国产综合久久久久久| 国产精品正在播放| 精品国产一区二区三区av性色| 成人性生交大片免费看中文| 精品1区2区在线观看| 午夜国产精品视频免费体验区| 国产午夜精品久久久久久久 | 欧美激情aⅴ一区二区三区| 国产欧美日韩精品一区| 伊人久久大香线蕉av超碰演员| 亚洲欧美电影院| 午夜亚洲性色福利视频| 奇米色777欧美一区二区| 久久一日本道色综合久久| 免费观看在线色综合| 51精品视频一区二区三区| youjizz国产精品| 亚洲视频图片小说| 久久久久久久久久久久久9999| 久久99久久99| 26uuu久久综合| 狠狠色综合网站久久久久久久| 亚洲色图另类专区| 久久亚洲电影| 国产成人午夜高潮毛片| 国产日韩欧美在线一区| 一本色道久久综合亚洲精品不 | 一区二区三区中文字幕| 美女精品网站| 国内精品伊人久久久久av影院 | 国产成人av一区二区| 精品成人a区在线观看| 影音先锋国产精品| 午夜欧美视频在线观看 | 伊人成人网在线看| 天堂va蜜桃一区二区三区漫画版| 欧美日韩欧美一区二区| 成人动漫一区二区| 国产精品国产三级国产普通话99 | 99精品欧美一区二区三区小说 | 美女尤物国产一区| 精品福利在线导航| 亚洲乱码视频| 精品一二三四区| 久久久久久久久97黄色工厂| 99日韩精品| 国产一区二区导航在线播放| 国产精品美女视频| 色偷偷久久人人79超碰人人澡| 成人国产一区二区三区精品| 夜夜精品视频一区二区| 欧美一区二区三区日韩视频| 亚洲高清资源| 韩国中文字幕2020精品| 国产精品视频麻豆| 91成人在线免费观看| 99re成人在线| 亚洲国产成人av网| 日韩精品一区二区三区在线| 亚洲电影自拍| 黑人精品欧美一区二区蜜桃 | 中国成人亚色综合网站| 国产揄拍国内精品对白| 中文字幕亚洲电影| 欧美午夜一区二区三区免费大片| 99久久久精品免费观看国产蜜| 亚洲一二三四区| 日韩女优电影在线观看| 亚洲在线不卡| 91亚洲精品久久久蜜桃| 日韩精品乱码av一区二区| 久久久久久久久99精品| 久久国产免费| 成人18视频在线播放| 婷婷六月综合网| 久久久美女毛片| 在线精品视频免费播放| 欧美久久在线| 国内久久精品视频| 亚洲激情校园春色| 日韩精品中文字幕一区| 久久久久国产精品午夜一区| 色综合亚洲欧洲| 蜜桃免费网站一区二区三区| 国产精品成人免费精品自在线观看| 欧美性受xxxx| 亚洲免费久久| 成人精品在线视频观看| 天天综合色天天综合| 国产精品不卡在线观看| 日韩亚洲国产中文字幕欧美| 美女国产一区| 亚洲国产精品第一区二区三区| 成人一级视频在线观看| 麻豆国产精品视频| 一区二区三区**美女毛片| 久久精品欧美一区二区三区不卡 | 99国产欧美另类久久久精品| 日韩在线一区二区三区| 日韩一区有码在线| 欧美成人性战久久| 日本丰满少妇一区二区三区| 欧美三区不卡| 丁香另类激情小说| 久久超碰97中文字幕| 亚洲一区二区三区四区在线| 国产精品久久久久久久久免费丝袜 | 欧美日韩三级在线| 欧美在线综合| 亚洲国产日韩欧美| 91亚洲精品乱码久久久久久蜜桃| 国产一本一道久久香蕉| 婷婷久久综合九色国产成人| 亚洲品质自拍视频| 国产精品网站在线观看| 亚洲精品一区二区三区精华液| 欧美日韩不卡一区二区| 久久久蜜桃一区二区人| 亚洲精品视频一区二区三区| 欧美人与禽猛交乱配| caoporn国产精品| 国产精品自在在线| 久久se这里有精品| 免费在线看成人av| 亚洲3atv精品一区二区三区| 亚洲精品乱码久久久久久黑人| 国产精品―色哟哟| www久久精品| 精品福利av导航| 日韩欧美国产高清| 欧美成人video| 日韩一区二区电影网| 在线不卡一区二区| 欧美精品一二三区| 欧美精三区欧美精三区| 欧美猛男超大videosgay| 欧美色爱综合网| 欧美放荡的少妇| 在线成人午夜影院| 欧美一区二区三区白人| 日韩亚洲欧美在线观看| 日韩免费观看2025年上映的电影| 7777精品伊人久久久大香线蕉经典版下载| 色香蕉久久蜜桃| 色噜噜夜夜夜综合网| 91久久人澡人人添人人爽欧美| 91久久久免费一区二区| 欧美日韩国产一级片| 精品视频在线免费观看| 欧美精品vⅰdeose4hd| 91麻豆精品国产| 精品久久99ma| 国产亚洲欧美色| 国产精品盗摄一区二区三区| 亚洲黄一区二区三区| 亚洲国产精品自拍| 日韩高清一区二区| 另类小说图片综合网| 精品午夜一区二区三区在线观看 | 免费日韩视频| 在线日韩一区二区| 日韩一区二区三区在线观看| 精品国产麻豆免费人成网站| 国产日韩欧美精品在线| 国产精品久久久久婷婷二区次| 亚洲女同一区二区| 日韩精品电影一区亚洲| 国产专区欧美精品| 99v久久综合狠狠综合久久| 国户精品久久久久久久久久久不卡| 亚洲精品一品区二品区三品区| 国产精品手机在线| 在线免费观看日本欧美| 欧美一区二区三区影视| 久久久久久久久久久久电影|