您的位置:首页 > 编程语言 > C#

C#迭代器模式(Iterator Pattern)实例教程

2014-09-12 15:34 1236 查看

本文以实例形式简单简述了C#迭代器模式的实现方法,分享给大家供大家参考。具体方法如下:

一般来说,迭代器模式的需求来自:需要对一些集合进行迭代,而迭代的方式可能有很多种。

说到迭代,动作大致包括设置第一个位置,获取下一个位置元素,判断是否迭代结束,获取当前位置元素,大致就这么些。把这些迭代动作封装到一个接口中。

public interface IIterator
{
void First();
string Next();
bool IsDone();
string Current();
}

在现实场景中,迭代的方式可能有很多种,先实现一种迭代方式,实现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类内部维护这一个集合,而这个集合是通过构造函数赋值的,否则的话,迭代器就没活干了。 

好了,迭代器,迭代的具体方式有了,迭代器给谁用呢?

只要一个类维护着集合,就可能用到以上实现IIterator接口的某种具体迭代器。所有需要迭代器的类都有一个共同的动作,就是创建一个迭代器。先把创建迭代器的动作抽象成接口。

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创建各自的迭代器,然后使用迭代器把集合的所有元素打印出来。

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());
}
}
}

运行结果如下图所示:

希望本文所述对大家的C#程序设计有所帮助。

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# 迭代器 模式