這篇文章將為大家詳細講解有關(guān)C#中怎么實現(xiàn)迭代器模式,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
站在用戶的角度思考問題,與客戶深入溝通,找到法庫網(wǎng)站設(shè)計與法庫網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋法庫地區(qū)。
在我們的應(yīng)用程序中常常有這樣一些數(shù)據(jù)結(jié)構(gòu):
它們是一個數(shù)據(jù)的集合,如果你知道它們內(nèi)部的實現(xiàn)結(jié)構(gòu)就可以去訪問它們,它們各自的內(nèi)部存儲結(jié)構(gòu)互不相同,各種集合有各自的應(yīng)用場合.說到這里大家可能想出一大堆這樣的集合了:List,Hashtable,ArrayList等等。這些集合各自都有各自的個性,這就是它們存在的理由。但如果你想遍歷它你必須知道它內(nèi)部的存儲細節(jié),作為一個集合元素,把內(nèi)部細節(jié)暴露出來肯定就不好了,這樣客戶程序就不夠穩(wěn)定了,在你更換集合對象的時候,比如List 不能滿足需求的時候,你換成Hashtable,因為以前的客戶程序過多的關(guān)注了List內(nèi)部實現(xiàn)的細節(jié),所以不能很好的移植。而C#迭代器模式就是為解決這個問題而生的:
提供一種一致的方式訪問集合對象中的元素,而無需暴露集合對象的內(nèi)部表示。
比如現(xiàn)在有這樣一個需求,遍歷集合內(nèi)的元素,然后輸出,但是并不限定集合是什么類型的集合,也就是未來集合可能發(fā)生改變。
思考:
集合會發(fā)生改變,這是變化點,集合改變了,遍歷方法也改變,我們要保證遍歷的方法穩(wěn)定,那么就要屏蔽掉細節(jié)。找到了變化點那我們就將其隔離起來(一般使用interface作為隔離手段):假設(shè)所有的集合都繼承自ICollection接口,這個接口用來隔離具體集合的,將集合屏蔽在接口后面,作為遍歷我們肯定需要這樣一些方法:MoveNext,Current,既然ICollection負責數(shù)據(jù)存儲,職責又要單一,那么就新建立一個接口叫做 Iterator吧,每種具體的集合都有自己相對應(yīng)的Iterator實現(xiàn):
public interface ICollection { int Count { get; } /// /// 獲取迭代器 /// /// 迭代器 Iterator GetIterator(); } /// /// 迭代器接口 /// public interface Iterator { bool MoveNext(); object Current { get; } } public class List : ICollection { private const int MAX = 10; private object[] items; public List() { items = new object[MAX]; } public object this[int i] { get { return items[i]; } set { this.items[i] = value; } } #region ICollection Members public int Count { get { return items.Length; } } public Iterator GetIterator() { return new ListIterator(this); } #endregion } public class ListIterator : Iterator { private int index = 0; private ICollection list; public ListIterator(ICollection list) { this.list = list; index = 0; } #region Iterator Members public bool MoveNext() { if (index + 1 > list.Count) return false; else { index++; return true; } } public object Current { get { return list[index]; } } #endregion } /// /// 測試 /// public class Program { static void Main() { ICollection list = new List(); Iterator iterator = list.GetIterator(); while (iterator.MoveNext()) { object current = iterator.Current; } } }
關(guān)于C#中怎么實現(xiàn)迭代器模式就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。