日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

談.net 中的職責(zé)鏈模式的使用_.Net教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:談web中緩存的使用
很多人都知道什么叫緩存,甚至學(xué)習(xí)過(guò),但用起來(lái)還真難用。我經(jīng)過(guò)幾天的學(xué)習(xí)cache想跟大家分享和討論。 我是帶著疑問去學(xué)習(xí)的。緩存是用在什么地方,有什么好處。 緩存就是把獲取的數(shù)據(jù)暫時(shí)存到緩存中,當(dāng)獲取的數(shù)據(jù)沒有變化時(shí)就還是用緩存里的東西。可能有人

職責(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)求并可訪問后繼者.如果可處理該請(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)于IronPython和C#執(zhí)行速度對(duì)比
其實(shí)我自己對(duì)執(zhí)行速度這個(gè)問題本來(lái)并沒有什么興趣,因?yàn)橐郧暗慕?jīng)驗(yàn)告訴我:除非是運(yùn)算密集型的程序,否則腳本語(yǔ)言和編譯型語(yǔ)言使用起來(lái)速度沒有多大差別。但是我們公司有個(gè)人知道我的想法以后,天天在我耳邊嚷嚷腳本運(yùn)行速度太慢,那好吧,讓我用實(shí)驗(yàn)來(lái)說(shuō)服

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2009-08-22
相關(guān).Net教程