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

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

Java通俗易懂系列設計模式之責任鏈模式

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

責任鏈設計模式是行為設計模式之一。

Java通俗易懂系列設計模式之責任鏈模式

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

JDK中的責任鏈模式示例

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

因此當try塊中發生任何異常時,它會發送到第一個catch塊進行處理。如果catch塊無法處理它,它會將請求轉發到鏈中的下一個對象,即下一個catch塊。如果即使最后一個catch塊也無法處理它,那么異常將被拋出鏈接到調用程序。

責任鏈設計模式示例

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

Java通俗易懂系列設計模式之責任鏈模式

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

責任鏈設計模式 - 基類和接口

我們可以創建一個類Currency來存儲分配和鏈實現使用的數量。

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

基接口應該有一個方法來定義鏈中的下一個處理器以及處理請求的方法。我們的ATM Dispense界面如下所示。

DispenseChain.java

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

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

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

責任鏈設計模式 - 創建鏈

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

這是我們的ATM Dispenser實現,用于處理用戶請求的數量。

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

當我們運行上面的應用程序時,我們得到如下的輸出。

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

責任鏈設計模式類圖

我們的ATM分配示例的責任鏈設計模式實現如下圖所示。

Java通俗易懂系列設計模式之責任鏈模式

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

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

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美系列亚洲系列| 激情欧美一区二区三区在线观看| 日本不卡1234视频| 国产精品试看| 亚洲精品亚洲人成人网| 亚洲一二三区在线| 中文字幕制服丝袜一区二区三区| 99国产一区二区三精品乱码| 日韩欧美成人一区| 久久超碰97中文字幕| 在线观看日产精品| 美腿丝袜亚洲综合| 欧美色网一区二区| 韩日精品视频一区| 6080午夜不卡| 福利一区福利二区| 日韩精品一区二区三区三区免费| 国产盗摄一区二区| 日韩一区二区三区视频在线| 国产盗摄视频一区二区三区| 91精品国产手机| 国产.欧美.日韩| 欧美videossexotv100| 成人激情午夜影院| 欧美va在线播放| 91首页免费视频| 国产清纯在线一区二区www| 欧美91福利在线观看| 国产亚洲一区二区在线观看| 91免费视频大全| 中文字幕精品—区二区四季| 极品中文字幕一区| 亚洲男人的天堂网| 亚洲少妇一区| 日韩av在线播放中文字幕| 欧美午夜精品理论片a级按摩| 韩国精品在线观看| 日韩视频123| 你懂的网址国产 欧美| 日本一区二区三区在线观看| 国产精品videossex久久发布| 综合久久久久久| 亚洲免费网址| 日本aⅴ精品一区二区三区 | 亚洲成人在线网站| 欧美伊人久久久久久久久影院| 国产一区二区不卡| 久久综合九色综合欧美亚洲| 激情综合自拍| 五月婷婷久久综合| 欧美一区二区三区免费大片| 99久久精品国产网站| 亚洲欧洲日韩综合一区二区| 久久亚洲午夜电影| 国产99精品国产| 国产精品久久毛片av大全日韩| 亚洲免费一区二区| 国产精品69毛片高清亚洲| 久久久精品免费观看| 在线不卡视频| 蜜臀av国产精品久久久久| 精品88久久久久88久久久 | 精品捆绑美女sm三区| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲天堂精品视频| 色天使久久综合网天天| 粉嫩13p一区二区三区| 国产精品久久久久久久蜜臀 | 亚洲成人中文在线| 日韩一区二区在线看| 国内精品久久久久久久影视蜜臀| 亚洲综合在线第一页| 欧美日韩亚洲另类| 欧美激情四色| 日韩av电影一区| 久久婷婷综合激情| 久久成人一区| 国产 日韩 欧美大片| 亚洲免费电影在线| 在线播放中文一区| 日韩亚洲不卡在线| 国产成人在线看| 日韩一区欧美一区| 欧美日免费三级在线| 国产综合网站| 精品亚洲国产成人av制服丝袜| 久久精品一区二区| 久久国产精品毛片| av午夜精品一区二区三区| 亚洲综合色视频| 日韩欧美在线一区二区三区| 国产一级一区二区| 成人天堂资源www在线| 一级做a爱片久久| 日韩亚洲电影在线| 91久久极品少妇xxxxⅹ软件| 国产一区高清在线| 一区二区三区中文字幕| 日韩女优电影在线观看| 亚洲综合国产| 欧美久久99| 激情五月播播久久久精品| 亚洲欧洲国产专区| 日韩一区二区三区视频在线| 性8sex亚洲区入口| 欧美连裤袜在线视频| 国产在线播放一区三区四| 亚洲一区在线观看免费| 久久日韩精品一区二区五区| 欧美在线免费播放| 亚洲毛片一区| av在线不卡观看免费观看| 免费成人美女在线观看| 亚洲男女一区二区三区| 欧美成人女星排名| 91成人国产精品| 亚洲精品中文字幕在线| 成人免费毛片aaaaa**| 亚洲第一成人在线| 国产嫩草影院久久久久| 91精品国产综合久久精品性色| 亚洲欧美99| 亚洲无线观看| av影院午夜一区| 国产一区二区三区不卡在线观看| 亚洲主播在线播放| 国产精品午夜在线观看| 日韩欧美视频在线 | 国产精品国产三级国产三级人妇 | 亚洲成人动漫在线免费观看| 国产精品女主播av| 欧美精品一区视频| 欧美一区日本一区韩国一区| 91福利小视频| 麻豆91精品| 日韩亚洲视频| 伊人狠狠色j香婷婷综合| 成人av网站在线| 国产一区二区福利| 久久99国产乱子伦精品免费| 舔着乳尖日韩一区| 亚洲精品一二三区| 1区2区3区国产精品| 国产丝袜美腿一区二区三区| 91精品国产综合久久久久久| 欧美视频一区二区三区在线观看| 亚洲综合国产激情另类一区| 亚洲激情不卡| 国产精品v欧美精品∨日韩| 99这里只有久久精品视频| 国产乱码精品一区二区三| 日本不卡高清视频| 日韩国产精品大片| 丝瓜av网站精品一区二区| 亚洲风情在线资源站| 亚洲乱码国产乱码精品精的特点| 国产精品天干天干在观线| 久久久久久久久免费| 久久综合色8888| 精品国内二区三区| 欧美大肚乱孕交hd孕妇| 日韩精品一区二区三区蜜臀 | 午夜欧美一区二区三区在线播放| 亚洲精品免费播放| 亚洲欧美日韩国产手机在线| 一色屋精品亚洲香蕉网站| 中文字幕精品在线不卡| 欧美激情自拍偷拍| 国产午夜精品久久| 国产日韩欧美在线一区| 久久久.com| 欧美国产一区二区在线观看 | 日韩一区二区在线看| 欧美一区二区三区在线观看| 777精品伊人久久久久大香线蕉| 欧美精品欧美精品系列| 欧美高清hd18日本| 91精品一区二区三区在线观看| 51精品秘密在线观看| 678五月天丁香亚洲综合网| 91精品久久久久久蜜臀| 91精品国产欧美一区二区| 欧美一区二区女人| 精品欧美一区二区久久| 国产欧美精品一区| 国产精品久久久久久久裸模| 亚洲精品一二三| 午夜av一区二区三区| 日本三级亚洲精品| 毛片av一区二区| 国产丶欧美丶日本不卡视频| 99这里只有久久精品视频| 欧美日韩亚洲一区二区三区在线观看 | 在线视频综合导航| 欧美日韩一区二区三区在线| 日韩一区国产二区欧美三区| 欧美精品一区二区在线播放| 国产日韩欧美综合在线| 亚洲人妖av一区二区| 亚洲国产成人91porn|