C#迭代器模式(Iterator Pattern)實例教程
本文以實例形式簡單簡述了C#迭代器模式的實現(xiàn)方法,分享給大家供大家參考。具體方法如下:
一般來說,迭代器模式的需求來自:需要對一些集合進行迭代,而迭代的方式可能有很多種。
說到迭代,動作大致包括設置第一個位置,獲取下一個位置元素,判斷是否迭代結(jié)束,獲取當前位置元素,大致就這么些。把這些迭代動作封裝到一個接口中。
public interface IIterator
{
void First();
string Next();
bool IsDone();
string Current();
}
在現(xiàn)實場景中,迭代的方式可能有很多種,先實現(xiàn)一種迭代方式,實現(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)部維護這一個集合,而這個集合是通過構(gòu)造函數(shù)賦值的,否則的話,迭代器就沒活干了。
好了,迭代器,迭代的具體方式有了,迭代器給誰用呢?
只要一個類維護著集合,就可能用到以上實現(xiàn)IIterator接口的某種具體迭代器。所有需要迭代器的類都有一個共同的動作,就是創(chuàng)建一個迭代器。先把創(chuàng)建迭代器的動作抽象成接口。
public interface IManagement
{
IIterator CreateIterator();
}
假設有一個管理用戶集合的類,使用以上的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);
}
}
假設有一個管理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)建各自的迭代器,然后使用迭代器把集合的所有元素打印出來。
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());
}
}
}
運行結(jié)果如下圖所示:

希望本文所述對大家的C#程序設計有所幫助。
相關(guān)文章
js substr,substring與java substring和C# substring的區(qū)別解析
本篇文章主要是對js中substr,substring與java中substring和C#中substring的區(qū)別進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
C#使用CryptoStream類加密和解密字符串的實現(xiàn)
CryptoStream設計用于在內(nèi)容以流的形式輸出到文件時加密和解密內(nèi)容,本文主要介紹了C#使用CryptoStream類加密和解密字符串的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-01-01

