成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談.NET中的職責鏈模式的使用

開發 后端
本篇文章淺談.NET中的職責鏈模式的使用。職責鏈模式使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。

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

職責鏈模式的結果如下圖

職責鏈模式 

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

ConcreteHandler:處理負責的請求并可訪問后繼者.如果可處理該請求,則處理之,否則將該請求轉發給后繼者.

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

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

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

以成都為例:

計算金額----------------------應納稅額---------個稅率
1、2000元/月以內免稅;
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)*相應工資范圍的個稅率

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

先說說我們的設計思想.

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

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.  
  6. namespace CompTax  
  7. {  
  8.     public class CompTax  
  9.     {  
  10.         private double Taxp;  
  11.         private double Minincome;  
  12.         private static double Disc=2000;  
  13.         private CompTax NextCompTax;  
  14.         public CompTax(double Minincome, double Taxp)  
  15.         {  
  16.             this.Minincome = Minincome;  
  17.             this.Taxp = Taxp;  
  18.             NextCompTax = null;  
  19.         }  
  20.         public double Comp(double income)  
  21.         {  
  22.  
  23.             if(income > Minincome && (NextCompTax==null|| income< NextCompTax.Minincome))  
  24.             {  
  25.                 return (income - Disc) * Taxp;  
  26.             }  
  27.             else 
  28.             {  
  29.                 return NextCompTax.Comp(income);  
  30.             }  
  31.         }  
  32.  
  33.         public static CompTax GetInstance()  
  34.         {  
  35.             CompTax[] cp ={  
  36.                              new CompTax(2000,0.05),  
  37.                              new CompTax(2500,0.1),  
  38.                              new CompTax(4000,0.15),  
  39.                              new CompTax(7000,0.2),  
  40.                              new CompTax(22000,0.25),  
  41.                              new CompTax(42000,0.3),  
  42.                              new CompTax(62000,0.35),  
  43.                              new CompTax(82000,0.4),  
  44.                              new CompTax(102000,0.45)  
  45.                          };  
  46.             CompTax ct=null;  
  47.             for (int i = 0; i < cp.Length-1; i++)  
  48.             {  
  49.                 if (i == 0)  
  50.                     ct = cp[i];  
  51.                 cp[i].NextCompTax = cp[i + 1];  
  52.             }  
  53.             return ct;  
  54.         }  
  55.     }  
  56. }  

然后在頁面上去調用.

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

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

在這里我們可以把cp這個數組從配置文件中讀取,這樣就實現了動態配置.

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

【編輯推薦】

  1. 淺談C#泛型的用處
  2. .Net平臺開源項目五年發展回顧
  3. .Net平臺下的分布式緩存設計
  4. .NET平臺上Web開發的未來?
  5. 微軟.NET平臺中類型使用的基本原理
責任編輯:yangsai 來源: .Net 技術學習博客
相關推薦

2011-07-20 14:04:42

.NET策略模式

2009-01-16 13:17:16

AjaxASP.NET.NET

2011-06-28 09:51:08

.NET對象相等

2009-07-27 13:01:28

TreeViewASP.NET

2022-10-09 14:15:42

短鏈設計

2023-05-12 12:09:38

職責鏈模式客服

2021-03-25 16:34:10

區塊鏈加密資產技術

2021-02-01 11:24:43

區塊鏈私鑰數字貨幣

2009-05-26 09:09:50

.NET FramewStream.Read基礎類

2009-07-22 17:07:16

WPF插件開發.NET Framew

2010-01-21 09:08:53

.NET設計模式

2015-08-21 10:36:32

.NETRedis

2009-06-22 10:34:43

Boost庫lambda

2009-07-23 15:44:39

ASP.NET MVC

2012-04-24 09:55:29

.NET

2023-09-28 08:45:56

開源責任鏈模式

2011-01-28 09:45:29

ASP.NET MVC

2009-04-21 09:37:50

ASP.NETAjaxJavaScript

2009-06-09 11:37:51

ViewStateViewDataASP.NET

2009-07-23 14:47:03

Page_Load方法ASP.NET
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产a视频 | 天天干天天操天天射 | 在线国产视频 | 黄色片在线免费看 | 91av视频在线免费观看 | 日本免费一区二区三区视频 | 久久国产精品视频观看 | 五月天国产视频 | 国产免费一区二区 | 午夜影院在线观看版 | 欧美一级片a | 日本污视频 | 国产 日韩 欧美 在线 | 鲁大师一区影视 | 成人国产精品入口免费视频 | 羞羞的视频免费观看 | 久久精品亚洲成在人线av网址 | 国产精品欧美一区二区三区 | 日本国产一区二区 | 日韩国产欧美在线观看 | 婷婷激情在线 | 毛片免费在线 | 国产欧美精品一区二区三区 | 东方伊人免费在线观看 | 欧美激情综合色综合啪啪五月 | 第一福利社区1024 | 亚洲视频在线一区 | 欧美日韩国产高清 | 色伊人网 | 成人深夜福利网站 | 99久久久国产精品免费消防器 | 在线亚洲人成电影网站色www | www狠狠爱com | 欧美日韩久久久久 | 99这里只有精品 | 暖暖成人免费视频 | 免费精品 | 在线a视频 | 日本一道本视频 | 欧美九九九 | 国产精品视频久久久 |