溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

.NET中的職責(zé)鏈模式的使用方法

發(fā)布時間:2021-07-14 10:51:47 來源:億速云 閱讀:131 作者:chen 欄目:編程語言

這篇文章主要介紹“.NET中的職責(zé)鏈模式的使用方法”,在日常操作中,相信很多人在.NET中的職責(zé)鏈模式的使用方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”.NET中的職責(zé)鏈模式的使用方法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

職責(zé)鏈模式使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系.將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對明處理它為止.

職責(zé)鏈模式的結(jié)果如下圖

.NET中的職責(zé)鏈模式的使用方法

Handler:定義一個處理請求的接口并實現(xiàn)后繼鏈.

ConcreteHandler:處理負責(zé)的請求并可訪問后繼者.如果可處理該請求,則處理之,否則將該請求轉(zhuǎn)發(fā)給后繼者.

Client:向鏈上的具體處理者對象提交請求.

在這里先用一個簡單的例子計算所得稅來說明一下職責(zé)鏈模式在應(yīng)用中的作用

先簡要的說一下計算所得稅的方法:

以成都為例:

計算金額----------------------應(yīng)納稅額---------個稅率
1、2000元/月以內(nèi)免稅;
2、2000元/月以上至2500元/月----不超過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)工資范圍的個稅率

當(dāng)你看到這樣的一個計算方式之后你心里是不是已經(jīng)有了自己的想法了?寫一系列的if語句來一條條的判斷.但這樣的寫法雖然可以實現(xiàn)目前的需求,可如果當(dāng)稅率發(fā)生了變化你又得拿出你的程序一步一步的修改.如果if語句的條數(shù)發(fā)生變化的話我們還必須在代碼中添加必要的if判斷.這對于程序的維護來說是相當(dāng)麻煩的.如果我們使用職責(zé)鏈模式的話就可以相當(dāng)簡單了.

先說說我們的設(shè)計思想.

我們可以采用職責(zé)鏈完成所得稅的計算,由職責(zé)鏈上的一個對象負責(zé)計算某一段的所得稅.如果符合計算條件,則計算;否則由下一個對象計算.這里我們把核心的代碼寫出來

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

然后在頁面上去調(diào)用.

private void button1_Click(object sender, EventArgs e)  {      textBox2.Text = CompTax.GetInstance().Comp(double.Parse(textBox1.Text)).ToString();  }

這樣我們在GetInstance靜態(tài)方法中把處理各種的可能連接了起來.如果***個對象不能滿足就用下一個對象來處理.一直直到能到處理為止.

在這里我們可以把cp這個數(shù)組從配置文件中讀取,這樣就實現(xiàn)了動態(tài)配置.

說到這個我們還有很多地方可以用到這樣的設(shè)計模式.比如我們會員積分功能的時候,當(dāng)積分到了多少就可以做什么事等等也可以用職責(zé)鏈輕松解決了.

到此,關(guān)于“.NET中的職責(zé)鏈模式的使用方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI