這篇文章主要介紹“.NET中的職責(zé)鏈模式的使用方法”,在日常操作中,相信很多人在.NET中的職責(zé)鏈模式的使用方法問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”.NET中的職責(zé)鏈模式的使用方法”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),敦煌企業(yè)網(wǎng)站建設(shè),敦煌品牌網(wǎng)站建設(shè),網(wǎng)站定制,敦煌網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,敦煌網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
職責(zé)鏈模式使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系.將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)明處理它為止.
職責(zé)鏈模式的結(jié)果如下圖
Handler:定義一個(gè)處理請(qǐng)求的接口并實(shí)現(xiàn)后繼鏈.
ConcreteHandler:處理負(fù)責(zé)的請(qǐng)求并可訪問(wèn)后繼者.如果可處理該請(qǐng)求,則處理之,否則將該請(qǐng)求轉(zhuǎn)發(fā)給后繼者.
Client:向鏈上的具體處理者對(duì)象提交請(qǐng)求.
在這里先用一個(gè)簡(jiǎn)單的例子計(jì)算所得稅來(lái)說(shuō)明一下職責(zé)鏈模式在應(yīng)用中的作用
先簡(jiǎn)要的說(shuō)一下計(jì)算所得稅的方法:
以成都為例:
計(jì)算金額----------------------應(yīng)納稅額---------個(gè)稅率
1、2000元/月以內(nèi)免稅;
2、2000元/月以上至2500元/月----不超過(guò)500元----5%
3、2500元/月以上至4000元/月----500元至2000元----10%
4、4000元/月以上至7000元/月----2000元至5000元----15%
5、7000元/月以上至22000元/月----5000元至20000元----20%
6、22000元/月以上至42000元/月----20000元至40000元----25%
7、42000元/月以上至62000元/月----40000元至60000元----30%
8、62000元/月以上至82000元/月----60000元至80000元----35%
9、82000元/月以上至102000元/月----80000元至100000元----40%
10、102000元/月以上----100000元以上----45%
(工資-2000)*相應(yīng)工資范圍的個(gè)稅率
當(dāng)你看到這樣的一個(gè)計(jì)算方式之后你心里是不是已經(jīng)有了自己的想法了?寫一系列的if語(yǔ)句來(lái)一條條的判斷.但這樣的寫法雖然可以實(shí)現(xiàn)目前的需求,可如果當(dāng)稅率發(fā)生了變化你又得拿出你的程序一步一步的修改.如果if語(yǔ)句的條數(shù)發(fā)生變化的話我們還必須在代碼中添加必要的if判斷.這對(duì)于程序的維護(hù)來(lái)說(shuō)是相當(dāng)麻煩的.如果我們使用職責(zé)鏈模式的話就可以相當(dāng)簡(jiǎn)單了.
先說(shuō)說(shuō)我們的設(shè)計(jì)思想.
我們可以采用職責(zé)鏈完成所得稅的計(jì)算,由職責(zé)鏈上的一個(gè)對(duì)象負(fù)責(zé)計(jì)算某一段的所得稅.如果符合計(jì)算條件,則計(jì)算;否則由下一個(gè)對(duì)象計(jì)算.這里我們把核心的代碼寫出來(lái)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CompTax { public class CompTax { private double Taxp; private double Minincome; private static double Disc=2000; private CompTax NextCompTax; public CompTax(double Minincome, double Taxp) { this.Minincome = Minincome; this.Taxp = Taxp; NextCompTax = null; } public double Comp(double income) { if(income > Minincome && (NextCompTax==null|| income< NextCompTax.Minincome)) { return (income - Disc) * Taxp; } else { return NextCompTax.Comp(income); } } public static CompTax GetInstance() { CompTax[] cp ={ new CompTax(2000,0.05), new CompTax(2500,0.1), new CompTax(4000,0.15), new CompTax(7000,0.2), new CompTax(22000,0.25), new CompTax(42000,0.3), new CompTax(62000,0.35), new CompTax(82000,0.4), new CompTax(102000,0.45) }; CompTax ct=null; for (int i = 0; i < cp.Length-1; i++) { if (i == 0) ct = cp[i]; cp[i].NextCompTax = cp[i + 1]; } return ct; } } }
然后在頁(yè)面上去調(diào)用.
private void button1_Click(object sender, EventArgs e) { textBox2.Text = CompTax.GetInstance().Comp(double.Parse(textBox1.Text)).ToString(); }
這樣我們?cè)贕etInstance靜態(tài)方法中把處理各種的可能連接了起來(lái).如果***個(gè)對(duì)象不能滿足就用下一個(gè)對(duì)象來(lái)處理.一直直到能到處理為止.
在這里我們可以把cp這個(gè)數(shù)組從配置文件中讀取,這樣就實(shí)現(xiàn)了動(dòng)態(tài)配置.
說(shuō)到這個(gè)我們還有很多地方可以用到這樣的設(shè)計(jì)模式.比如我們會(huì)員積分功能的時(shí)候,當(dāng)積分到了多少就可以做什么事等等也可以用職責(zé)鏈輕松解決了.
到此,關(guān)于“.NET中的職責(zé)鏈模式的使用方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!