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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

我們可以創(chuàng)建一個類Currency來存儲分配和鏈實現(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)該有一個方法來定義鏈中的下一個處理器以及處理請求的方法。我們的ATM Dispense界面如下所示。

DispenseChain.java

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

我們需要創(chuàng)建不同的處理器類來實現(xiàn)DispenseChain接口并提供分配方法的實現(xiàn)。由于我們正在開發(fā)我們的系統(tǒng)以使用三種類型的貨幣賬單--50美元,20美元和10美元,我們將創(chuàng)建三個具體實施。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);}}}

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

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

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

這是我們的ATM Dispenser實現(xiàn),用于處理用戶請求的數(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īng)用程序時,我們得到如下的輸出。

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è)計模式類圖

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

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

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

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

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产成人精品三级高清久久91 | 欧美成人一二区| 综合激情婷婷| 久久亚洲一区| 亚洲乱码视频| 91成人在线精品视频| 欧美亚洲二区| 老司机免费视频一区二区三区| 麻豆久久一区二区| 国产一区二区亚洲| 久久精品高清| 国产精品色网| 亚洲一区二区成人| 美日韩精品视频| 五月激激激综合网色播| 日韩欧美中文字幕在线视频| 国产日韩欧美一区二区三区 | 精品国产欧美| 成人va天堂| 欧美 日韩 国产精品免费观看| 国产一区二区三区自拍| 免费一级片91| 国产日韩一区二区三免费高清| 粉嫩av一区二区三区四区五区| 日本韩国欧美超级黄在线观看| 久久在线电影| 午夜在线精品偷拍| 欧美日韩精品一区二区三区视频 | 日本伊人久久| 精品国产麻豆| 日韩国产激情| 欧美在线资源| 欧美日本久久| 久久精品免费一区二区三区 | 久久精品xxxxx| 岛国av免费在线观看| 欧美另类专区| 欧美精品国产白浆久久久久| 在线一区av| 蜜臀av亚洲一区中文字幕| 欧美亚洲专区| 青青青免费在线视频| 午夜国产精品视频| 国产免费av国片精品草莓男男 | 国产一区日韩一区| 日韩在线网址| 日韩成人高清| 日韩精彩视频在线观看| 一区二区三区四区日本视频| 久久高清一区| 正在播放日韩精品| 日韩一区二区三区在线看| 成人国产综合| 婷婷五月色综合香五月| 精品国产一区二区三区性色av| 红桃视频国产一区| 国产精品a级| 亚洲国产一区二区在线观看| 欧美韩一区二区| 性色av一区二区怡红| 精品九九在线| 亚州精品视频| 伊人久久大香线蕉av不卡| 国产九一精品| 综合激情一区| 久久精选视频| 国产精品一区亚洲| 国产美女精品| 欧美日韩视频免费观看| 日韩在线黄色| 亚洲女同中文字幕| 成人亚洲精品| 国产毛片精品久久| 蜜臀久久久99精品久久久久久| 亚洲成人不卡| 久久精品国产99| 亚洲精品系列| 五月精品视频| 麻豆成全视频免费观看在线看| 日韩福利视频一区| 亚洲一区区二区| 天堂网av成人| 国产成人精品一区二区三区在线| 91精品福利观看| 野花国产精品入口| 日韩欧美自拍| 久久精品五月| 国产精品分类| 91精品日本| 亚洲精品进入| 亚洲一区免费| 好吊视频一区二区三区四区| 精品免费av在线| 国际精品欧美精品| 国产精品亚洲欧美日韩一区在线 | 91久久国产| 热三久草你在线| 精品久久久网| 久久av影视| 欧美日韩网址| 日韩不卡在线观看日韩不卡视频 | 精品美女在线视频| 国产精品资源| 日韩动漫一区| 日韩av一区二区三区| 一区二区三区网站| 日韩午夜电影| 香蕉精品视频在线观看| 四虎4545www国产精品| 国产成人免费| 国产+成+人+亚洲欧洲在线| 美女精品一区二区| 国产精品mv在线观看| 国产极品模特精品一二| 国产视频一区二区在线播放| 国产无遮挡裸体免费久久| 欧美精品福利| 国产精品激情| 欧美国产中文高清| 麻豆精品少妇| 美女国产一区二区三区| 国产精品亚洲欧美一级在线| 国产伦精品一区二区三区千人斩| 国产精品亚洲人成在99www | 成人综合一区| 中文字幕色婷婷在线视频| 亚洲美女久久精品| 中文字幕在线视频网站| 日韩欧美不卡| 亚洲韩日在线| 99在线观看免费视频精品观看| 伊人久久大香线蕉av超碰演员| 尹人成人综合网| 石原莉奈在线亚洲二区| 黄页网站一区| 亚洲一区激情| 日韩精品成人在线观看| 国产欧美激情| 精品欠久久久中文字幕加勒比| 给我免费播放日韩视频| 欧美色图国产精品| 99国产精品自拍| 亚洲精品动态| 国产精品综合色区在线观看| 精品一区av| 久久精品青草| 99香蕉国产精品偷在线观看| 色狠狠一区二区三区| 国产精品久久久久久久久久久久久久久| 久久亚洲资源中文字| 日本不卡免费高清视频在线| 99在线观看免费视频精品观看| 日韩精品一区二区三区中文在线| 国产美女精品视频免费播放软件| 成人在线免费观看网站| 久久免费国产| 久久午夜精品| 国产精品白丝av嫩草影院| av亚洲一区二区三区| 亚洲综合丁香| 18国产精品| 日韩国产一区二区三区| 亚洲精华国产欧美| 欧美一区自拍| 九九精品调教| 欧美国产91| 91久久精品无嫩草影院| 日韩欧美在线中字| 亚洲婷婷免费| 日韩在线成人| 91亚洲自偷观看高清| 999在线观看精品免费不卡网站| 日本亚洲最大的色成网站www| 久久xxx视频| 久久亚洲成人| 国产麻豆一区| 欧美日韩国产欧| 国产丝袜一区| 99久久夜色精品国产亚洲狼 | 国产 日韩 欧美一区| 丝袜美腿一区二区三区| 国产精品久久久久久久久久齐齐| 久久免费黄色| 日本欧美一区二区| 日韩av首页| 欧美一区在线观看视频| 欧美影院三区| 国产精品三级| 夜夜精品视频| 日本久久精品| 日本99精品| 蜜桃成人精品| 日韩av一区二区在线影视| 日韩欧美午夜| 国产日本精品| 欧美日韩国产探花| 精品久久中文| 97久久亚洲| 99在线|亚洲一区二区| 国产精品久久观看|