設(shè)想這樣一個(gè)需求,我們需要為自己的框架提供一個(gè)負(fù)責(zé)排序的組件。目前需要實(shí)現(xiàn)的是冒泡排序算法和快速排序算法,根據(jù)“面向接口編程”的,我們可以為這些排序算法提供一個(gè)統(tǒng)一的接口ISort,在這個(gè)接口中有一個(gè)方法Sort(),它能接受一個(gè)object數(shù)組參數(shù)。對(duì)數(shù)組進(jìn)行排序后,返回該數(shù)組。接口的定義
public interface ISort { void Sort(ref object beSorted); } |
然而一般對(duì)于排序而言,排列是有順序之分的,例如升序,或者降序,返回的結(jié)果也不相同。最簡(jiǎn)單的方法我們可以利用if語(yǔ)句來(lái)實(shí)現(xiàn)這一目的,例如在QuickSort類中:
public class QuickSort:ISort { private string m_SortType; public QuickSort(string sortType) { m_SortType = sortType; } public void Sort(ref object beSorted) { if (m_SortType.ToUpper().Trim() == “ASCENDING”) { //執(zhí)行升序的快速排序; } else { //執(zhí)行降序的快速排序; } } } |
當(dāng)然,我們也可以將string類型的SortType定義為枚舉類型,減少出現(xiàn)錯(cuò)誤的可能性。然而仔細(xì)閱讀代碼,我們可以發(fā)現(xiàn)這樣的代碼是非常僵化的,一旦需要擴(kuò)展,如果要求我們?cè)黾有碌呐判蝽樞,例如字典順序,那么我們面臨的工作會(huì)非常繁重。也就是說(shuō),變化產(chǎn)生了。通過(guò)分析,我們發(fā)現(xiàn)所謂排序的順序,恰恰是排序算法中最關(guān)鍵的一環(huán),它決定了誰(shuí)排列在前,誰(shuí)排列在后。然而它并不屬于排序算法,而是一種比較的策略,后者說(shuō)是比較的行為。