C#迭代器模式(Iterator Pattern)實(shí)例教程
本文以實(shí)例形式簡(jiǎn)單簡(jiǎn)述了C#迭代器模式的實(shí)現(xiàn)方法,分享給大家供大家參考。具體方法如下:
一般來(lái)說(shuō),迭代器模式的需求來(lái)自:需要對(duì)一些集合進(jìn)行迭代,而迭代的方式可能有很多種。
說(shuō)到迭代,動(dòng)作大致包括設(shè)置第一個(gè)位置,獲取下一個(gè)位置元素,判斷是否迭代結(jié)束,獲取當(dāng)前位置元素,大致就這么些。把這些迭代動(dòng)作封裝到一個(gè)接口中。
public interface IIterator
{
void First();
string Next();
bool IsDone();
string Current();
}
在現(xiàn)實(shí)場(chǎng)景中,迭代的方式可能有很多種,先實(shí)現(xiàn)一種迭代方式,實(shí)現(xiàn)IIterator接口。
public class IWannaIterate : IIterator
{
private List<string> _list;
private int position;
public IWannaIterate(List<string> list)
{
Console.WriteLine("我要感謝IIterator,有了它我才可以迭代");
_list = list;
position = 0;
}
public void First()
{
position = 0;
}
public string Next()
{
return _list[position++];
}
public bool IsDone()
{
return position >= _list.Count;
}
public string Current()
{
return _list[position];
}
}
以上,迭代器IWannaIterate類內(nèi)部維護(hù)這一個(gè)集合,而這個(gè)集合是通過(guò)構(gòu)造函數(shù)賦值的,否則的話,迭代器就沒(méi)活干了。
好了,迭代器,迭代的具體方式有了,迭代器給誰(shuí)用呢?
只要一個(gè)類維護(hù)著集合,就可能用到以上實(shí)現(xiàn)IIterator接口的某種具體迭代器。所有需要迭代器的類都有一個(gè)共同的動(dòng)作,就是創(chuàng)建一個(gè)迭代器。先把創(chuàng)建迭代器的動(dòng)作抽象成接口。
public interface IManagement
{
IIterator CreateIterator();
}
假設(shè)有一個(gè)管理用戶集合的類,使用以上的IWannaIterate迭代器。
public class MyUserManagement : IManagement
{
private List<string> _users;
public MyUserManagement()
{
_users = new List<string>();
_users.Add("hello");
_users.Add("world");
_users.Add("nice");
}
public IIterator CreateIterator()
{
return new IWannaIterate(_users);
}
}
假設(shè)有一個(gè)管理Book集合的類,也使用以上的IWannaIterate迭代器。
public class MyBookManagement : IManagement
{
private List<string> _books;
public MyBookManagement()
{
_books = new List<string>();
_books.Add("美麗世界");
_books.Add("你好嗎");
}
public IIterator CreateIterator()
{
return new IWannaIterate(_books);
}
}
客戶端讓MyUserManagement和MyBookManagement創(chuàng)建各自的迭代器,然后使用迭代器把集合的所有元素打印出來(lái)。
class Program
{
static void Main(string[] args)
{
IManagement magageA = new MyUserManagement();
IManagement manageB = new MyBookManagement();
IIterator iteratorA = magageA.CreateIterator();
IIterator iteratorB = manageB.CreateIterator();
Console.WriteLine("打印出的user列表");
PrintList(iteratorA);
Console.WriteLine();
Console.WriteLine("打印出book列表");
PrintList(iteratorB);
Console.ReadKey();
}
private static void PrintList(IIterator iterator)
{
while (!iterator.IsDone())
{
Console.WriteLine(iterator.Next());
}
}
}
運(yùn)行結(jié)果如下圖所示:

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
詳解C#中Dictionary<TKey,TValue>的存儲(chǔ)結(jié)構(gòu)
無(wú)論是實(shí)際的項(xiàng)目中,還是在我們學(xué)習(xí)的過(guò)程中,都會(huì)重點(diǎn)的應(yīng)用到Dictionary<TKey,?TValue>這個(gè)存儲(chǔ)類型,所以本文就來(lái)為大家介紹一下這一存儲(chǔ)結(jié)構(gòu)的相關(guān)知識(shí),希望對(duì)大家有所幫助2023-11-11
Unity?UGUI的TouchInputModule觸摸輸入模塊組件介紹使用示例
這篇文章主要為大家介紹了Unity?UGUI的TouchInputModule觸摸輸入模塊組件介紹使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
C#中使用Cache框架快速實(shí)現(xiàn)Cache操作
這篇文章介紹了C#中使用Cache框架快速實(shí)現(xiàn)Cache操作的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
C#實(shí)現(xiàn)合并多個(gè)word文檔的方法
這篇文章主要介紹了C#實(shí)現(xiàn)合并多個(gè)word文檔的方法,是C#針對(duì)Word文檔操作的一個(gè)非常重要的技巧,需要的朋友可以參考下2014-09-09
詳解C#如何實(shí)現(xiàn)一個(gè)安全的事件訂閱器
事件訂閱器是一個(gè)對(duì)象,它訂閱(或監(jiān)聽)某個(gè)事件,并在事件發(fā)生時(shí)執(zhí)行相應(yīng)的操作,本文主要介紹了C#實(shí)現(xiàn)一個(gè)安全的事件訂閱器的相關(guān)知識(shí),感興趣的可以了解下2024-01-01
C#實(shí)現(xiàn)獲取鼠標(biāo)句柄的方法
這篇文章主要介紹了C#實(shí)現(xiàn)獲取鼠標(biāo)句柄的方法,詳細(xì)的講述了實(shí)現(xiàn)獲取鼠標(biāo)句柄的具體步驟及實(shí)現(xiàn)方法,并附有完整的實(shí)例源碼供大家參考,需要的朋友可以參考下2014-09-09

