欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

關(guān)于.NET Framework中的設(shè)計(jì)模式--應(yīng)用策略模式為L(zhǎng)ist排序_.Net教程

編輯Tag賺U幣

推薦:基于Asp.Net MVC4 Bundle捆綁壓縮技術(shù)的介紹
本篇文章,小編將為大家介紹,Asp.Net MVC4 Bundle捆綁壓縮技術(shù),有需要的朋友可以參考一下

簡(jiǎn)單類型排序

編程時(shí)遇到排序在平常不過(guò),使用.Net最常見(jiàn)的就是對(duì)泛型List<T>進(jìn)行排序,如果T是簡(jiǎn)單數(shù)據(jù)類型排序那么很簡(jiǎn)單

復(fù)制代碼 代碼如下:www.ghpqjb.com

public List<int> SortSimpleList(List<int> list)
{
list.Sort();
return list;
}

同樣對(duì)string等簡(jiǎn)單類型List<T>排序均如此,如果我們要排的對(duì)象復(fù)雜了怎么辦,我們知道List<T> sort()最后是用快速排序?qū)崿F(xiàn),快速排序也好,什么排序都需要知道list中item之間的比較結(jié)果,如果是簡(jiǎn)單的int類型,直接判斷即可,對(duì)實(shí)現(xiàn)了IComparable接口的對(duì)象,可以調(diào)用其CompareTo()實(shí)現(xiàn)item比較大小,下面是一個(gè)快速排序的寫法

復(fù)制代碼 代碼如下:www.ghpqjb.com

void Sort<T>(T[] array, int left, int right, IComparer_sly<T> comparer) where T : IComparable
{
if (left < right)
{
T middle = array[(left + right) / 2];
int i = left - 1;
int j = right + 1;
while (true)
{
while (array[++i].CompareTo(middle) < 0) ;

while (array[--j].CompareTo(middle) > 0) ;

if (i >= j)
break;

T temp = array[i];
array[i] = array[j];
array[j] = temp;
}

Sort(array, left, i - 1, comparer);
Sort(array, j + 1, right, comparer);
}
}

問(wèn)題

對(duì)于前兩種情況固然可以實(shí)現(xiàn)排序,但是我們不可能要求所有待排序的對(duì)象都實(shí)現(xiàn)IComparable接口,就算能夠保證每個(gè)對(duì)象都實(shí)現(xiàn)IComparable接口,如果想實(shí)現(xiàn)對(duì)象內(nèi)多個(gè)字段排序,比如Student對(duì)象,有時(shí)候想按照姓名排序,有時(shí)候是成績(jī),有時(shí)候是年齡,這怎么破

按照面向?qū)ο蟮乃枷耄炎兓?dú)立出來(lái),封裝變化,對(duì)于我們排序List<T>時(shí)變化的其實(shí)就是怎么比較兩個(gè)對(duì)象的大小的算法,如果我們可以把這個(gè)算法拿出來(lái),排序就簡(jiǎn)單了很多,無(wú)論什么排序,算法都是由的,我們要封裝的部分是怎樣比較兩個(gè)item的大小的算法,為了實(shí)現(xiàn)拓展性我們要遵循面向?qū)ο笤O(shè)計(jì)的另外一個(gè)重要原則,針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。

編寫通用的List<T>排序方法

首先定義一個(gè)接口,里面有一個(gè)比較item大小的方法,在排序的時(shí)候作為參數(shù)傳入,當(dāng)然是傳入它的實(shí)現(xiàn)類,有了這個(gè)想法,我們可以自己寫個(gè)List<T>的排序方法

復(fù)制代碼 代碼如下:www.ghpqjb.com

public interface mparer_sly<T>{
int Compare(T x, T y);
}

然后為了測(cè)試,我們?yōu)長(zhǎng)ist<T>加一個(gè)包裝,寫一個(gè)自己的Sort方法,內(nèi)部也用快速排序?qū)崿F(xiàn)。一直困惑我們的變化部分——比較大小算法,我們把它封轉(zhuǎn)起來(lái),作為參數(shù)傳入

復(fù)制代碼 代碼如下:www.ghpqjb.com

using System;
using System.Collections.Generic;

namespace Test.Stategy
{public class ListTest<T>
{
public List<T> list = new List<T>();
public void Sort(IComparer_sly<T> comparer)
{
T[] array = list.ToArray();
int left = 0;
int right = array.Length - 1;
QuickSort(array, left, right, comparer);
list = new List<T>(array);
}

private void QuickSort<S>(S[] array, int left, int right, IComparer_sly<S> comparer)
{
if (left < right)
{
S middle = array[(left + right) / 2];
int i = left - 1;
int j = right + 1;
while (true)
{
while (comparer.Compare(array[++i], middle) < 0) ;

while (comparer.Compare(array[--j], middle) > 0) ;

if (i >= j)
break;

S temp = array[i];
array[i] = array[j];
array[j] = temp;
}

QuickSort(array, left, i - 1, comparer);
QuickSort(array, j + 1, right, comparer);
}
}
}
}

比如現(xiàn)在我們有個(gè)Student 的實(shí)體

復(fù)制代碼 代碼如下:www.ghpqjb.com

public class Student
{
public Student(int id, string name)
{
this.ID = id;
this.Name = name;
}
public int ID { get; set; }
public string Name { get; set; }
}

如果想對(duì)這個(gè)實(shí)體組成的List<T>進(jìn)行排序,我們只需一個(gè)實(shí)現(xiàn) IComparer_sly<Student>的類 StudentComparer,并在內(nèi)部實(shí)現(xiàn)其比較大小方法——Compare(),同時(shí)我們可以添加遞增還是遞減排序的控制

復(fù)制代碼 代碼如下:www.ghpqjb.com

class StudentComparer : IComparer_sly<Student>
{
private string expression;
private bool isAscending;
public StudentComparer(string expression, bool isAscending)
{
this.expression = expression;
this.isAscending = isAscending;
}

public int Compare(Student x, Student y)
{
object v1 = GetValue(x), v2 = GetValue(y);
if (v1 is string || v2 is string)
{
string s1 = ((v1 == null) ? "" : v1.ToString().Trim());
string s2 = ((v2 == null) ? "" : v2.ToString().Trim());
if (s1.Length == 0 && s2.Length == 0)
return 0;
else if (s2.Length == 0)
return -1;
else if (s1.Length == 0)
return 1;
}

// 這里就偷懶調(diào)用系統(tǒng)方法,不自己實(shí)現(xiàn)了,其實(shí)就是比較兩個(gè)任意相投類型數(shù)據(jù)大小,自己實(shí)現(xiàn)比較麻煩
if (!isAscending)
return Comparer.Default.Compare(v2, v1);
return Comparer.Default.Compare(v1, v2);
}

private object GetValue(Student stu)
{
object v = null;
switch (expression)
{
case "id":
v = stu.ID;
break;
case "name":
v = stu.Name;
break;
default:
v = null;
break;
}
return v;
}
}

測(cè)試一下好不好使

復(fù)制代碼 代碼如下:www.ghpqjb.com

static void Main(string[] args)
{
ListTest<Student> test = new ListTest<Student>();
for (int i = 0; i < 10; i++)
{
Student stu = new Student(i,string.Format("N_"+(9-i)));
test.list.Add(stu);
}
Console.WriteLine("元數(shù)據(jù)");
for (int i = 0; i < test.list.Count;i++ )
{
Console.WriteLine(string.Format("ID:{0} , Name:{1}", test.list[i].ID, test.list[i].Name));
}

Console.WriteLine("Name 遞增");
test.Sort(new StudentComparer("name", true));
for (int i = 0; i < test.list.Count; i++)
{
Console.WriteLine(string.Format("ID:{0} , Name:{1}", test.list[i].ID, test.list[i].Name));
}
}

看看效果

Capture

.NET List的sort如何為我們排序

用ILSpy反編譯可以看到在調(diào)用List<T>的sort()方法時(shí)內(nèi)部調(diào)用的時(shí) this.Sort(0, this.Count, null); 然后往里面扒,經(jīng)過(guò)一系列異常處理后會(huì)調(diào)用 Array.Sort<T>(this._items, index, count, comparer); this._items是把List內(nèi)容轉(zhuǎn)換成數(shù)組,同樣再經(jīng)歷一些列異常處理,調(diào)用方法 ArraySortHelper<T>.Default.Sort(array, index, length, comparer); 再往里就和我們上面寫的方法大同小異了,只不過(guò)微軟加了很多異常處理和算法優(yōu)化。

策略模式

看清楚了上面這個(gè)例子我們就可以進(jìn)入正題,說(shuō)說(shuō)我們的策略模式了。策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來(lái),而且使它們還可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)

5366d0160924ab189a9f061935fae6cd7b890b16

這個(gè)模式涉及到三個(gè)角色:

環(huán)境(Context)角色:持有一個(gè)Strategy類的引用。抽象策略(Strategy)角色:這是一個(gè)抽象角色,通常由一個(gè)接口或抽象類實(shí)現(xiàn)。此角色給出所有的具體策略類所需的接口。具體策略(ConcreteStrategy)角色:包裝了相關(guān)的算法或行為。

相信大家可以分方便的把我們上面例子中的類對(duì)應(yīng)上策略模式的角色,IComparer接口是我們的抽象策略角色, ListTest<T> 類持有抽象策略的引用是環(huán)境(在Sort方法中,其實(shí)可以把接口定義為類的屬性,在構(gòu)造函數(shù)中賦值,不過(guò)不適合此場(chǎng)景,畢竟并不是所有List都需要排序,不能強(qiáng)制其接受一個(gè)可能會(huì)用不到的接口,當(dāng)然對(duì)每個(gè)實(shí)例都需要用某個(gè)策略的場(chǎng)景是合適的),毫無(wú)疑問(wèn)我們實(shí)現(xiàn)IComparer抽象策略的類就是具體策略。

使用場(chǎng)景

策略模式很容易理解,不過(guò)能夠用它很好的理解封裝變化和針對(duì)接口編程者兩個(gè)面向?qū)ο笤O(shè)計(jì)原則,我們來(lái)看看什么時(shí)候我們會(huì)用策略模式

1、 多個(gè)類只區(qū)別在表現(xiàn)行為不同,可以使用Strategy模式,在運(yùn)行時(shí)動(dòng)態(tài)選擇具體要執(zhí)行的行為。

2、 需要在不同情況下使用不同的策略(算法),這些策略有統(tǒng)一接口。

3、 對(duì)客戶隱藏具體策略(算法)的實(shí)現(xiàn)細(xì)節(jié),彼此完全獨(dú)立。

策略模式的優(yōu)勢(shì)和不足

優(yōu)點(diǎn):

1、 提供了一種替代繼承的方法,而且既保持了繼承的優(yōu)點(diǎn)(代碼重用)還比繼承更靈活(算法獨(dú)立,可以任意擴(kuò)展)。

2、 使用組合,避免程序中使用多重條件轉(zhuǎn)移語(yǔ)句,使系統(tǒng)更靈活,并易于擴(kuò)展。

3、 遵守大部分GRASP原則和常用設(shè)計(jì)原則,高內(nèi)聚、低偶合。

缺點(diǎn):

1、 因?yàn)槊總(gè)具體策略類都會(huì)產(chǎn)生一個(gè)新類,所以會(huì)增加系統(tǒng)需要維護(hù)的類的數(shù)量。

分享:asp.net中文件下載功能的實(shí)例代碼
asp.net中文件下載功能的實(shí)例代碼,需要的朋友可以參考一下

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2013-04-22
相關(guān).Net教程
亚洲国产日韩综合久久精品| 成年人视频大全| 91在线色戒在线| 成人av在线不卡| 亚洲第一成人网站| 国产裸体无遮挡| av亚洲在线观看| 91精品国产91久久久久久黑人| 成人午夜电影网站| 欧美日韩在线不卡| 日韩精品dvd| 久久精品国产**网站演员| 亚洲电影第三页| 亚洲97在线观看| 激情视频小说图片| 日韩av无码中文字幕| **日韩最新| 青青草国产精品亚洲专区无| 精品成人国产在线观看男人呻吟| 久久中国妇女中文字幕| 神马影院一区二区三区| 午夜福利三级理论电影| 国产乱码久久久| 亚洲人体偷拍| 亚洲图片自拍偷拍| 不卡大黄网站免费看| 一区二区三区成人| www.日韩av.com| 日韩欧美精品一区二区| 成年人网站免费看| 免费av网站观看| 黄色亚洲在线| 洋洋av久久久久久久一区| 91av在线免费观看| 熟女少妇在线视频播放| 久久精品视频国产| jizz性欧美2| 国产麻豆欧美日韩一区| 91精品黄色片免费大全| 成人午夜小视频| 久国产精品视频| 综合网五月天| 性生活免费在线观看| 亚洲高清在线看| 欧洲激情综合| 天天做天天摸天天爽国产一区| 国产在线一区二区三区| 午夜精品中文字幕| 国产喷水吹潮视频www| 中文字幕一区二区三区在线视频| 国产精品日日摸夜夜摸av| 中文字幕久久久| 中文字幕久精品免| 亚洲色成人www永久网站| 色135综合网| 懂色aⅴ精品一区二区三区蜜月 | 菁菁伊人国产精品| 在线亚洲激情| 欧美日韩在线影院| 高清不卡日本v二区在线| 国产一卡二卡三卡四卡| 亚洲av成人精品一区二区三区在线播放| 中国女人久久久| 精品国产人成亚洲区| 精品欧美一区二区精品久久| 永久免费看mv网站入口78| 大陆精大陆国产国语精品| 亚洲欧美日本韩国| 国内久久久精品| 无码内射中文字幕岛国片| 精品国产www| 国内精品久久久久国产盗摄免费观看完整版 | 色综合天天综合网天天狠天天 | 自拍自偷一区二区三区| 欧美韩国一区二区| 精品国内亚洲在观看18黄| 97久久国产亚洲精品超碰热| 一区二区三区福利视频| 久久精品国内一区二区三区水蜜桃 | 樱花草国产18久久久久| 2019日本中文字幕| 水蜜桃av无码| 91麻豆精品国产综合久久久| 国产精品久久久久久久久动漫 | 久久久欧美一区二区| 国产乱淫av片| 日韩mv欧美mv国产网站| 中文字幕永久在线不卡| 成人免费福利视频| 久久久久黄色片| 成人黄色av| 午夜视频一区在线观看| 成人h视频在线| 免费在线观看一级片| 国语产色综合| 亚洲午夜在线视频| 精品国产福利| 中文天堂在线资源| 国产一区二区在线观看免费视频| 亚洲大尺度视频| 免费在线成人网| 日韩av有码在线| 欧美少妇在线观看| 人妻无码中文字幕| 中文字幕免费观看一区| 26uuu亚洲伊人春色| 中文字幕永久免费| 久久亚洲人体| 国产色产综合产在线视频 | 黄频在线免费观看| 韩国三级在线一区| 中文字幕国产精品| 波多野结衣电影免费观看| 91成人在线| 久久久久久久久一| 日韩av网站免费在线| 伊人久久男人天堂| 熟女少妇精品一区二区| 韩国三级大全久久网站| 不卡电影一区二区三区| 国产a∨精品一区二区三区不卡| 亚洲一区二区三区黄色| 精品国产91| 精品国产一区二区三区av性色| 天天爽人人爽夜夜爽| 日本高清不卡一区二区三区视频| 不卡的看片网站| 国产欧美日韩高清| 日本成人精品视频| 国产精品久久观看| 欧美高清视频不卡网| 中文字幕欧美日韩一区二区| 精品国产黄色片| japanese在线观看| 99精品在免费线中文字幕网站一区 | 中文久久久久久| 日韩毛片免费观看| 一区二区三区在线视频观看 | 99精品视频精品精品视频| 日韩av一区二区在线观看| 在线观看你懂的视频| 日韩电影二区| 亚洲人在线视频| 天堂社区在线视频| 亚洲+变态+欧美+另类+精品| 91久久国产最好的精华液| 亚欧洲精品在线视频免费观看| 免费a级片在线观看| 亚洲欧美另类久久久精品| 天天综合色天天综合色hd| 自拍偷拍欧美视频| 国产日韩综合av| 国产一区二区免费电影| 成人免费视频毛片| 日本欧美一区二区三区乱码| 欧美在线免费看视频| 欧美日韩视频第一区| www.国产区| 久久青草视频| 在线观看一区二区视频| 中文字幕精品—区二区日日骚| 天天免费亚洲黑人免费| 色综合色综合色综合色综合色综合 | 中文字幕日韩精品一区二区| 欧美黄页免费| 欧美高清视频在线高清观看mv色露露十八| 久久午夜夜伦鲁鲁一区二区| 欧美精品久久久久久| 一本色道久久88综合日韩精品 | 欧美激情精品久久久久久久变态 | 97精品国产综合久久久动漫日韩| 在线视频中文字幕一区二区| 超碰av在线免费观看| 欧美色图国产精品| 自拍偷拍亚洲区| 四虎永久免费在线| 日韩午夜免费视频| 97国产在线观看| 久草手机在线观看| 国产清纯白嫩初高生在线观看91 | 99精品视频在线| 久久艹在线视频| 黄色一级视频免费| 日本色综合中文字幕| 国产精品久久精品| 激情五月婷婷小说| 凹凸精品一区二区三区| 国产精品99久久久久久有的能看| 成人激情av| 少妇无套内谢久久久久| 国产精品久久久久久久久图文区| 中文字幕中文字幕99| 日韩精品一区二区三区中文字幕| 色香色香欲天天天影视综合网| 日本精品久久久久中文字幕| 欧美第十八页| 亚洲欧美一区二区三区情侣bbw| 久久久精品视频国产| 成人久久久久| 久久亚洲精品小早川怜子66| 日本三级视频在线| 国产精品热久久久久夜色精品三区| avove在线观看| 日本国产欧美| 色综合夜色一区| 五月婷婷六月丁香激情| 亚洲视频日本| 国产精品日韩专区| 日本视频免费观看| 国产精品久久久久影视| 免费看毛片的网址| 欧美精品三级在线| 日韩精品在线观看一区二区| 亚洲精品乱码久久久久久蜜桃欧美| 一区二区三区四区五区精品视频| 欧美日韩国产综合久久| 日韩中文av在线| 欧美人与性动交α欧美精品| 国产精品腿扒开做爽爽爽挤奶网站| 欧美第一淫aaasss性| 日本熟女毛茸茸| 91理论电影在线观看| 国产综合av一区二区三区| 国产精品无码久久久久| 亚洲第一精品夜夜躁人人爽 | 国产成人高清在线| 91视频国产高清| 自拍偷自拍亚洲精品被多人伦好爽| 欧美丝袜一区二区| 黄色免费观看视频网站| 啪啪激情综合网| 久久av红桃一区二区小说| 中国一区二区视频| 日韩欧美精品网址| 黄色国产在线视频| 国产成人av一区二区三区在线| 亚洲精品中文字幕乱码三区不卡| 波多野结衣激情| 亚洲国产aⅴ精品一区二区三区| 欧美日韩在线播| 精品人妻一区二区免费视频| 美女诱惑黄网站一区| 日本免费久久高清视频| 成人午夜视频一区二区播放| 91麻豆精品国产91久久久使用方法| 欧美特级黄色录像| 91蜜桃在线观看| 国产a级片网站| 国产精品一区二区99| 国模私拍一区二区三区| 亚洲精品免费在线观看视频| 51久久夜色精品国产麻豆| 亚洲天堂精品一区| 福利电影一区二区三区| 手机在线视频你懂的| 91综合久久| 国产精品综合久久久| 国产69精品久久久久按摩| 国产一区二区三区在线观看视频 | 91香蕉国产线在线观看| 麻豆国产精品一区二区三区| 日本一区二区三区四区高清视频 | 国产乱了高清露脸对白| 夫妻av一区二区| 日本香蕉视频在线观看| 精品91视频| 国产成人精品一区二区在线| 国产精品无码免费播放| 777奇米四色成人影色区| 亚洲天堂网av在线| 99精品国产一区二区三区不卡| 日本一区二区三区在线视频| 九九热线有精品视频99| 在线丨暗呦小u女国产精品| 国产福利片一区二区| 亚洲国产精品久久久久爰性色| 欧美一二三四区在线| 日本一区二区三区网站| 精品一区二区三区在线观看 | 国产欧美日韩一区二区三区| 日韩美女毛片| 国产成人自拍视频在线观看| 国产精品99久久久久久董美香 | 中文字幕第36页| 极品美女销魂一区二区三区免费| 水蜜桃在线免费观看| 国产欧美一级| 亚洲欧美日韩精品久久久| 中文字幕免费一区二区三区| 国产成人精品一区二区三区福利| 久久久久高潮毛片免费全部播放| 日本成人精品在线| av中文字幕免费| 亚洲精品在线三区| 欧美一区二区三区不卡视频| 丝袜a∨在线一区二区三区不卡| 亚洲精品在线免费播放| 久久精品视频日本| 色哟哟日韩精品| 欧美一级特黄高清视频| 亚洲国产成人高清精品| 日本美女bbw| 久久九九久精品国产免费直播| www.久久91| 93久久精品日日躁夜夜躁欧美| 午夜在线观看av| www.亚洲色图| 欧美黄网在线观看| 久久久噜噜噜| www.国产亚洲| 蜜臀av一区二区在线观看| 久草免费福利在线| 麻豆精品在线播放| www.浪潮av.com| 国产精品爽爽久久久久久| 欧美三级电影在线看| 激情小说中文字幕| 欧美日韩国产在线播放网站| 日本视频www| 日韩午夜激情av| 中文字幕一区二区人妻痴汉电车| 亚洲第一精品夜夜躁人人爽| 一级片在线观看视频| 欧美影视一区在线| 久久久久亚洲av无码专区桃色| 亚洲色图都市小说| 国产女同无遮挡互慰高潮91| 久久久亚洲精品石原莉奈| 精品人妻一区二区乱码| 欧美韩日一区二区三区| 99久久国产精| 亚洲青青久久| 亚洲精品按摩视频| 影音先锋亚洲天堂| 91精品麻豆日日躁夜夜躁| 国产黄网在线观看| 日韩大片免费观看视频播放| 亚洲va久久久噜噜噜无码久久| 日韩综合视频在线观看| 日本中文字幕一区二区| 国产91精品不卡视频| 高潮按摩久久久久久av免费| 性欧美暴力猛交69hd| 伊人久久大香线蕉av超碰| 国内精品模特av私拍在线观看| www.久久久久爱免| 国产精品白丝jk喷水视频一区| 国产精品主播在线观看| 成人动漫视频在线观看完整版| 午夜精品毛片| 超碰免费在线公开| 久久99蜜桃精品| 国产精品区在线| 国产精品传媒在线| 又色又爽的视频| 欧美日韩成人综合在线一区二区| 中文字幕天堂在线| 国产香蕉精品视频一区二区三区| 日韩pacopacomama| 一区二区三区影院| 九一国产精品视频| 丝瓜av网站精品一区二区| 欧美男女爱爱视频| 2020日本不卡一区二区视频| 色天使在线观看| 亚洲欧美怡红院| 中国一级特黄录像播放| 精品福利在线观看| 国产性xxxx高清| 7777精品伊人久久久大香线蕉超级流畅 | 三级黄色录像视频| 日韩一区二区三区三四区视频在线观看| 国产女人18毛片水真多| 九色精品美女在线| 国精产品一区二区三区有限公司| 欧美诱惑福利视频| 欧美三级三级| 丰满人妻一区二区三区53号| www.亚洲色图.com| 少妇人妻好深好紧精品无码| 亚洲电影中文字幕在线观看| www.av麻豆| 中日韩午夜理伦电影免费| 一区二区三区日本视频| 成人影片在线播放| 先锋影音久久久| www.av蜜桃| 久久亚洲欧美国产精品乐播| 萌白酱视频在线| 日韩美一区二区三区| 911美女片黄在线观看游戏| 欧美另类极品videosbestfree| 粉嫩的18在线观看极品精品| 欧美日韩一区二区视频在线| 韩国久久久久| 男人和女人啪啪网站| 国产精品久久久久久久蜜臀| 久久97人妻无码一区二区三区| 亚洲区一区二区| 国产精品一区二区三区av |