欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C#設(shè)計模式之策略模式的示例分析-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)C#設(shè)計模式之策略模式的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)一直通過網(wǎng)站建設(shè)和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實效"的一站式服務(wù),以網(wǎng)站設(shè)計、網(wǎng)站制作、移動互聯(lián)產(chǎn)品、成都營銷網(wǎng)站建設(shè)服務(wù)為核心業(yè)務(wù)。十余年網(wǎng)站制作的經(jīng)驗,使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價格便宜而且實用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

策略模式(Stragety Pattern)

策略模式屬于行為型模式,它定義了一系列的算法,并將每一個算法封裝起來,而且使他們可以相互替換,讓算法獨立于使用它的客戶而獨立變化。

使用策略模式可以把行為和環(huán)境分割開來。環(huán)境類負(fù)責(zé)維持和查詢行為類,各種算法則在具體策略類中提供。

角色:

1、抽象策略(Strategy)

這是一個抽象角色,通常由一個接口或抽象類實現(xiàn)。此角色給出所有的具體策略類所需的接口;

2、具體策略(Concrete Strategy)

實現(xiàn)抽象策略的具體策略類,包裝了相關(guān)的算法或行為;

3、環(huán)境類(Context)

持有一個Strategy類的引用并可以根據(jù)邏輯選擇實例相應(yīng)的策略。

示例:

C#設(shè)計模式之策略模式的示例分析

命名空間StragetyPattern中包含策略基類Tax以及它的8個實現(xiàn)類,Context環(huán)境類持有策略基類。本示例通過一個優(yōu)雅的方式來計算個人所得稅。

C#開發(fā)筆記之04-如何用C#優(yōu)雅的計算個人所得稅?

namespace StragetyPattern
public abstract class Tax {

    protected decimal TaxRate = 0;

    protected decimal QuickDeduction = 0;

    public virtual decimal Calculate(decimal income) {
        return income * TaxRate - QuickDeduction;
    }

}

策略基類Tax,表示個人所得稅,TaxRate為稅率,QuickDeduction為速算扣除數(shù),Calculate計算相應(yīng)收入的個人所得稅。

public class Level0 : Tax {

    public Level0() {
        TaxRate = 0.00m;
        QuickDeduction = 0;
    }

}

0級個人所得稅階梯,表示個人所得稅的初始狀態(tài)。

public class Level1 : Tax {

    public Level1() {
        TaxRate = 0.03m;
        QuickDeduction = 0;
    }

}

1級個人所得稅階梯。

public class Level2 : Tax {

    public Level2() {
        TaxRate = 0.10m;
        QuickDeduction = 105;
    }

}

2級個人所得稅階梯。

public class Level3 : Tax {

    public Level3() {
        TaxRate = 0.20m;
        QuickDeduction = 555;
    }

}

3級個人所得稅階梯。

public class Level4 : Tax {

    public Level4() {
        TaxRate = 0.25m;
        QuickDeduction = 1005;
    }

}

4級個人所得稅階梯。

public class Level5 : Tax {

    public Level5() {
        TaxRate = 0.30m;
        QuickDeduction = 2755;
    }

}

5級個人所得稅階梯。

public class Level6 : Tax {

    public Level6() {
        TaxRate = 0.35m;
        QuickDeduction = 5505;
    }

}

6級個人所得稅階梯。

public class Level7 : Tax {

    public Level7() {
        TaxRate = 0.45m;
        QuickDeduction = 13505;
    }

}

7級個人所得稅階梯。

public class Context {

    private Tax _tax = null;

    private const decimal EXEMPTION_VALUE = 3500m;

    private List<decimal> _taxLevel = new List<decimal>{
        0,
        1500,
        4500,
        9000,
        35000,
        55000,
        80000,
        decimal.MaxValue
    };

    private List<Type> _levels = new List<Type>();

    private void GetLevels() {
        _levels = AppDomain.CurrentDomain.GetAssemblies()
                           .SelectMany(tp => tp.GetTypes()
                           .Where(t => t.BaseType == typeof(Tax)))
                           .ToList();
    }

    public Context() {
        GetLevels();
    }

    public Context Calculate(decimal income) {
        _tax = new Level0();
        var result = income - EXEMPTION_VALUE;
        for(int i = 1; i <= _taxLevel.Count - 1; i++) {
            if(result > _taxLevel[i - 1] && result <= _taxLevel[i]) {
                _tax = (Tax)Activator.CreateInstance(_levels[i]);
            }
        }
        Console.WriteLine($"Income = {income}," + $"tax = {_tax.Calculate(result)}!");
        return this;
    }

}

環(huán)境類Context,首先需要維持對Tax的引用,EXEMPTION_VALUE表示免征額(本例使用3500元),之后通過反射和一些技巧選擇相應(yīng)的Tax實現(xiàn)類來計算相應(yīng)階梯的個人所得稅。

public class Program {

    private static Context _context = new Context();

    public static void Main(string[] args) {
        _context.Calculate(2500.00m)
                .Calculate(4900.00m)
                .Calculate(5500.00m)
                .Calculate(7000.00m)
                .Calculate(10000.00m)
                .Calculate(16000.00m)
                .Calculate(43000.00m)
                .Calculate(70000.00m)
                .Calculate(100000.00m)
                .Calculate(4500.00m)
                .Calculate(1986.00m);

        Console.ReadKey();
    }

}

以上是調(diào)用方的代碼,Calculate經(jīng)過特殊處理以支持方法鏈。以下是這個案例的輸出結(jié)果:

Income = 2500.00,tax = 0.0000!
Income = 4900.00,tax = 42.0000!
Income = 5500.00,tax = 95.0000!
Income = 7000.00,tax = 245.0000!
Income = 10000.00,tax = 745.0000!
Income = 16000.00,tax = 2120.0000!
Income = 43000.00,tax = 9095.0000!
Income = 70000.00,tax = 17770.0000!
Income = 100000.00,tax = 29920.0000!
Income = 4500.00,tax = 30.0000!
Income = 1986.00,tax = 0.0000!

優(yōu)點:

1、策略類的等級結(jié)構(gòu)定義了一個算法或行為族,恰當(dāng)使用繼承可以把公共的代碼移到父類里面,從而避免重復(fù)的代碼;
2、繼承可以處理多種算法或行為,可以避免使用多重條件轉(zhuǎn)移語句。

缺點:

1、客戶端必須知道所有的策略類,并自行決定使用哪一個策略類;
2、策略模式造成很多的策略類,造成“子類爆炸”。

使用場景:

1、如果在一個系統(tǒng)里面有許多類,它們之間的區(qū)別僅在于它們的行為,那么使用策略模式可以動態(tài)地讓一個對象在許多行為中選擇一種行為;
2、一個系統(tǒng)需要動態(tài)地在幾種算法中選擇一種。

感謝各位的閱讀!關(guān)于“C#設(shè)計模式之策略模式的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

本文名稱:C#設(shè)計模式之策略模式的示例分析-創(chuàng)新互聯(lián)
文章起源:http://aaarwkj.com/article16/gcsdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、定制開發(fā)網(wǎng)站策劃、網(wǎng)站維護全網(wǎng)營銷推廣、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
五月婷婷丁香噜噜噜噜| 国产av自拍在线免费观看| 国产999精品免费国产| 国产精品av国产精华液| 色哟哟免费在线观看视频| av影片在线观看亚洲天堂| 97视频高清在线观看| 欧美日韩一区二区三区666| 99热只有这里才有精品| 人妻少妇精品视频二区| 18岁以下禁止观看的视频| 亚洲精品在线播放av| 熟女人妻丰满视频中文字幕| 精品成人18亚洲av播放| 国产三级视频在线2022| 白白色手机视频免费看| 国产精品一区二区久久毛片| 中文一级伦理一区二区| 91免费看片在线观看| 日韩欧美一区二区大片| 日本人妻风俗店中文字幕| 免费看真人性生活视频| 日韩电影中文字幕一区| 欧美三级视频一区二区三区 | 国产免费成人在线视频| 日韩欧美国产麻豆一区精品| 精品人妻一区二区四区| 欧美精品在线高清观看| 闫国产一区二区三区色噜噜| 黑人精品一区二区三区| 国产亚洲精品一区久久| 国产91精品网站在线| 一区二区在线视频免费播放| 亚洲中文字幕高清无二区| 天堂中文字幕在线乱码一区 | 国产又黄又爽不卡的视频| 国产精品九九久久精品女同| 日韩亚洲一区二区免费| 欧美一级免费黄片在线播放| 亚洲女同成人在线观看| 日本高清中文精品在线不卡|