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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java通俗易懂系列設(shè)計(jì)模式之責(zé)任鏈模式

瀏覽:174日期:2022-08-13 17:58:53
概述

責(zé)任鏈設(shè)計(jì)模式是行為設(shè)計(jì)模式之一。

Java通俗易懂系列設(shè)計(jì)模式之責(zé)任鏈模式

責(zé)任鏈模式用于在軟件設(shè)計(jì)中實(shí)現(xiàn)松散耦合,其中來(lái)自客戶端的請(qǐng)求被傳遞到對(duì)象鏈以處理它們。然后鏈中的對(duì)象將自己決定誰(shuí)將處理請(qǐng)求以及是否需要將請(qǐng)求發(fā)送到鏈中的下一個(gè)對(duì)象。

JDK中的責(zé)任鏈模式示例

讓我們看一下JDK中責(zé)任鏈模式的例子,然后我們將繼續(xù)實(shí)現(xiàn)這種模式的真實(shí)例子。我們知道在try-catch塊代碼中我們可以有多個(gè)catch塊。這里每個(gè)catch塊都是處理該特定異常的處理器。

因此當(dāng)try塊中發(fā)生任何異常時(shí),它會(huì)發(fā)送到第一個(gè)catch塊進(jìn)行處理。如果catch塊無(wú)法處理它,它會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到鏈中的下一個(gè)對(duì)象,即下一個(gè)catch塊。如果即使最后一個(gè)catch塊也無(wú)法處理它,那么異常將被拋出鏈接到調(diào)用程序。

責(zé)任鏈設(shè)計(jì)模式示例

責(zé)任鏈模式的一個(gè)很好的例子是ATM分配機(jī)器。用戶按照定義的貨幣賬單輸入要分配的金額和機(jī)器分配金額,例如50美元,20美元,10美元等。如果用戶輸入的數(shù)量不是10的倍數(shù),則會(huì)引發(fā)錯(cuò)誤。我們將使用Chain of Responsibility模式來(lái)實(shí)現(xiàn)此解決方案。鏈將以與下圖相同的順序處理請(qǐng)求。

Java通俗易懂系列設(shè)計(jì)模式之責(zé)任鏈模式

請(qǐng)注意,我們可以在單應(yīng)用程序中輕松實(shí)現(xiàn)此解決方案,但隨后復(fù)雜性將增加,解決方案將緊密耦合。因此,我們將創(chuàng)建一系列分配系統(tǒng),以分配50美元,20美元和10美元的賬單。

責(zé)任鏈設(shè)計(jì)模式 - 基類和接口

我們可以創(chuàng)建一個(gè)類Currency來(lái)存儲(chǔ)分配和鏈實(shí)現(xiàn)使用的數(shù)量。

Currency.java

package com.journaldev.design.chainofresponsibility;public class Currency {private int amount;public Currency(int amt){this.amount=amt;}public int getAmount(){return this.amount;}}

基接口應(yīng)該有一個(gè)方法來(lái)定義鏈中的下一個(gè)處理器以及處理請(qǐng)求的方法。我們的ATM Dispense界面如下所示。

DispenseChain.java

package com.journaldev.design.chainofresponsibility;public interface DispenseChain {void setNextChain(DispenseChain nextChain);void dispense(Currency cur);}責(zé)任鏈模式 - 鏈實(shí)現(xiàn)

我們需要?jiǎng)?chuàng)建不同的處理器類來(lái)實(shí)現(xiàn)DispenseChain接口并提供分配方法的實(shí)現(xiàn)。由于我們正在開發(fā)我們的系統(tǒng)以使用三種類型的貨幣賬單--50美元,20美元和10美元,我們將創(chuàng)建三個(gè)具體實(shí)施。Dollar50Dispenser.java

package com.journaldev.design.chainofresponsibility;public class Dollar50Dispenser implements DispenseChain {private DispenseChain chain;@Overridepublic void setNextChain(DispenseChain nextChain) {this.chain=nextChain;}@Overridepublic void dispense(Currency cur) {if(cur.getAmount() >= 50){int num = cur.getAmount()/50;int remainder = cur.getAmount() % 50;System.out.println('Dispensing '+num+' 50$ note');if(remainder !=0) this.chain.dispense(new Currency(remainder));}else{this.chain.dispense(cur);}}}

Dollar20Dispenser.java

package com.journaldev.design.chainofresponsibility;public class Dollar20Dispenser implements DispenseChain{private DispenseChain chain;@Overridepublic void setNextChain(DispenseChain nextChain) {this.chain=nextChain;}@Overridepublic void dispense(Currency cur) {if(cur.getAmount() >= 20){int num = cur.getAmount()/20;int remainder = cur.getAmount() % 20;System.out.println('Dispensing '+num+' 20$ note');if(remainder !=0) this.chain.dispense(new Currency(remainder));}else{this.chain.dispense(cur);}}}

Dollar10Dispenser.java

package com.journaldev.design.chainofresponsibility;public class Dollar10Dispenser implements DispenseChain {private DispenseChain chain;@Overridepublic void setNextChain(DispenseChain nextChain) {this.chain=nextChain;}@Overridepublic void dispense(Currency cur) {if(cur.getAmount() >= 10){int num = cur.getAmount()/10;int remainder = cur.getAmount() % 10;System.out.println('Dispensing '+num+' 10$ note');if(remainder !=0) this.chain.dispense(new Currency(remainder));}else{this.chain.dispense(cur);}}}

這里要注意的重點(diǎn)是分配方法的實(shí)施。您會(huì)注意到每個(gè)實(shí)現(xiàn)都在嘗試處理請(qǐng)求,并且根據(jù)數(shù)量,它可能會(huì)處理部分或全部部分。如果其中一個(gè)鏈不能完全處理它,它會(huì)將請(qǐng)求發(fā)送到鏈中的下一個(gè)處理器以處理剩余的請(qǐng)求。如果處理器無(wú)法處理任何內(nèi)容,它只會(huì)將相同的請(qǐng)求轉(zhuǎn)發(fā)到下一個(gè)鏈。

責(zé)任鏈設(shè)計(jì)模式 - 創(chuàng)建鏈

這是非常重要的一步,我們應(yīng)該仔細(xì)創(chuàng)建鏈,否則處理器可能根本沒有得到任何請(qǐng)求。例如,在我們的實(shí)現(xiàn)中,如果我們將第一個(gè)處理器鏈保持為Dollar10Dispenser然后Dollar20Dispenser,那么請(qǐng)求將永遠(yuǎn)不會(huì)被轉(zhuǎn)發(fā)到第二個(gè)處理器,并且鏈將變得無(wú)用。

這是我們的ATM Dispenser實(shí)現(xiàn),用于處理用戶請(qǐng)求的數(shù)量。

ATMDispenseChain.java

package com.journaldev.design.chainofresponsibility;import java.util.Scanner;public class ATMDispenseChain {private DispenseChain c1;public ATMDispenseChain() {// initialize the chainthis.c1 = new Dollar50Dispenser();DispenseChain c2 = new Dollar20Dispenser();DispenseChain c3 = new Dollar10Dispenser();// set the chain of responsibilityc1.setNextChain(c2);c2.setNextChain(c3);}public static void main(String[] args) {ATMDispenseChain atmDispenser = new ATMDispenseChain();while (true) {int amount = 0;System.out.println('Enter amount to dispense');Scanner input = new Scanner(System.in);amount = input.nextInt();if (amount % 10 != 0) {System.out.println('Amount should be in multiple of 10s.');return;}// process the requestatmDispenser.c1.dispense(new Currency(amount));}}}

當(dāng)我們運(yùn)行上面的應(yīng)用程序時(shí),我們得到如下的輸出。

Enter amount to dispense

530

Dispensing 10 50$ note

Dispensing 1 20$ note

Dispensing 1 10$ note

Enter amount to dispense

100

Dispensing 2 50$ note

Enter amount to dispense

120

Dispensing 2 50$ note

Dispensing 1 20$ note

Enter amount to dispense

15

責(zé)任鏈設(shè)計(jì)模式類圖

我們的ATM分配示例的責(zé)任鏈設(shè)計(jì)模式實(shí)現(xiàn)如下圖所示。

Java通俗易懂系列設(shè)計(jì)模式之責(zé)任鏈模式

責(zé)任鏈設(shè)計(jì)模式重點(diǎn) 客戶端不知道鏈的哪個(gè)部分將處理請(qǐng)求,它將把請(qǐng)求發(fā)送到鏈中的第一個(gè)對(duì)象。例如,在我們的程序中,ATMDispenseChain不知道誰(shuí)在處理分配輸入金額的請(qǐng)求。 鏈中的每個(gè)對(duì)象都有自己的實(shí)現(xiàn)來(lái)處理請(qǐng)求,全部或部分或?qū)⑵浒l(fā)送到鏈中的下一個(gè)對(duì)象。 鏈中的每個(gè)對(duì)象都應(yīng)該引用鏈中的下一個(gè)對(duì)象來(lái)轉(zhuǎn)發(fā)請(qǐng)求,它由java組成。 仔細(xì)創(chuàng)建鏈非常重要,否則可能會(huì)出現(xiàn)請(qǐng)求永遠(yuǎn)不會(huì)轉(zhuǎn)發(fā)到特定處理器或鏈中沒有能夠處理請(qǐng)求的對(duì)象的情況。在我的實(shí)現(xiàn)中,我添加了對(duì)用戶輸入數(shù)量的檢查,以確保它被所有處理器完全處理,但是如果請(qǐng)求到達(dá)最后一個(gè)對(duì)象并且鏈中沒有其他對(duì)象,我們可能不檢查它并拋出異常將請(qǐng)求轉(zhuǎn)發(fā)給。這是一個(gè)設(shè)計(jì)決定。 責(zé)任鏈設(shè)計(jì)模式很好地實(shí)現(xiàn)了失去耦合,但如果大多數(shù)代碼在所有實(shí)現(xiàn)中都很常見,那么它會(huì)帶來(lái)很多實(shí)現(xiàn)類和維護(hù)問(wèn)題的權(quán)衡。JDK中的責(zé)任鏈模式示例 java.util.logging.Logger#log() javax.servlet.Filter#doFilter()

以上就是Java通俗易懂系列設(shè)計(jì)模式之責(zé)任鏈模式的詳細(xì)內(nèi)容,更多關(guān)于Java設(shè)計(jì)模式的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美特黄一区| 蜜臀精品一区二区三区在线观看| 日本欧美在线看| 女人天堂亚洲aⅴ在线观看| 久久精品国产www456c0m| 三级精品视频| 午夜国产精品视频| 中文字幕日韩欧美精品高清在线| 日韩欧美久久| 久久久国产精品网站| 粉嫩av一区二区三区四区五区 | 国产精成人品2018| 激情中国色综合| 激情丁香综合| 日本成人在线网站| 国产一区二区三区日韩精品| 999久久久免费精品国产| 蜜臀久久99精品久久久久久9 | 美美哒免费高清在线观看视频一区二区| 日韩精品一区二区三区av| 国产精品qvod| 激情综合网站| 亚洲九九精品| 四虎国产精品免费观看| 国产亚洲精品v| 国产精品高清一区二区| 午夜精品久久久久久久久久蜜桃| 在线综合亚洲| 国产欧美日韩精品一区二区免费| 黑森林国产精品av| 噜噜噜躁狠狠躁狠狠精品视频| 日本在线观看不卡视频| 蜜臀久久久99精品久久久久久| 91精品国产自产精品男人的天堂| 国产精品99一区二区三| 国产日韩专区| 久久99免费视频| 婷婷亚洲五月色综合| 日本电影久久久| 999精品在线| 国产欧美一区二区三区精品观看| 免费国产自久久久久三四区久久| 97精品资源在线观看| 视频福利一区| 国产日韩亚洲| 香蕉国产精品| 国产精品v亚洲精品v日韩精品| 91亚洲国产高清| 在线精品观看| 日韩久久精品网| 97成人在线| 婷婷国产精品| 久久爱www.| 在线观看一区| 欧美va天堂| 超碰超碰人人人人精品| 久久精品99国产精品| 国产精品丝袜xxxxxxx| 成人午夜网址| 日本va欧美va瓶| 国精品一区二区| 国产精品嫩模av在线| 最新中文字幕在线播放| 亚洲资源网站| 久久婷婷激情| 国产一区二区三区亚洲综合| 亚洲视频二区| 亚洲高清不卡| 麻豆视频在线观看免费网站黄 | 青草国产精品| 亚洲一区二区三区四区电影 | 青草av.久久免费一区| 亚洲欧美网站| 在线看片不卡| 99久久婷婷| 久久九九精品| 色综合www| 91亚洲自偷观看高清| 国产日韩欧美三区| 日韩av成人高清| 亚洲精品大片| 日韩欧美高清一区二区三区| 国产亚洲综合精品| 亚洲国内欧美| 欧美精品99| 久久激五月天综合精品| 涩涩涩久久久成人精品| 免费看欧美美女黄的网站| 婷婷亚洲五月| 激情综合亚洲| 激情五月综合网| 亚洲精品a级片| 欧美性感美女一区二区| 亚洲伦乱视频| 极品日韩av| 日韩一区二区免费看| 99在线|亚洲一区二区| 亚洲在线一区| 久久国产精品久久久久久电车| 国产一区二区三区亚洲综合| 国产精品久一| 蜜桃精品视频| 九九久久国产| 成人影视亚洲图片在线| 精品久久久亚洲| 国产aⅴ精品一区二区三区久久| 久久久久久夜| 99久久久久国产精品| 亚洲高清影视| 蜜桃久久精品一区二区| 日韩精品亚洲专区| 国产精品qvod| 日本一区二区高清不卡| 久久国产小视频| 久久av一区二区三区| 91精品国产成人观看| 黄色成人91| 日韩久久99| 麻豆极品一区二区三区| 高潮久久久久久久久久久久久久| 91看片一区| 日韩一级精品| 日韩1区2区日韩1区2区| 久久一区国产| 亚洲小说欧美另类婷婷| 影音先锋久久精品| 国产精品3区| 久久精品高清| 亚洲精品日本| 精品精品久久| 日韩大片在线| 亚洲尤物av| 国产白浆在线免费观看| 免费在线看一区| 精品精品99| 久久不射网站| 精品视频在线你懂得| 日韩视频不卡| 麻豆国产精品视频| 国产农村妇女精品一区二区| 麻豆精品在线观看| 亚洲少妇一区| 国产66精品| 亚洲精品少妇| 亚洲综合在线电影| 久久xxxx精品视频| 高清av一区| 婷婷五月色综合香五月| 国产在线观看www| 日韩欧美高清一区二区三区| av一区在线| 国产欧美一区二区三区精品观看| 久久国产亚洲| 久久香蕉精品香蕉| 在线免费观看亚洲| 久久久久久免费视频| 国产精品一区二区三区四区在线观看 | 香蕉久久一区| 日韩大片在线播放| 久久精品99国产国产精| 国产中文一区| 国产一区2区在线观看| 亚洲精品乱码| 蜜臀91精品国产高清在线观看| 国产精品三级| 免费日韩一区二区| 久久精品国内一区二区三区水蜜桃| 天堂va欧美ⅴa亚洲va一国产| 国产一区二区高清| 国产欧美欧美| 亚洲综合福利| 欧美日韩三区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 精品捆绑调教一区二区三区| 日韩区一区二| 午夜在线一区| 久久一区二区三区电影| 精品国产三区在线| 免费人成精品欧美精品| 亚洲高清激情| 丁香六月综合| 欧美成人精品一级| 日韩精品欧美精品| 一级欧洲+日本+国产| 91av亚洲| 国产一卡不卡| 视频国产精品| 中文字幕一区二区三区日韩精品| 亚洲激情中文| 黄色在线一区| 久久高清精品| 日韩在线观看不卡| 高清一区二区| 丰满少妇一区| 精品福利久久久| 精品视频在线一区二区在线| 美腿丝袜亚洲一区| 久久99精品久久久野外观看| 国产精品一区毛片| 欧美激情 亚洲a∨综合|