时间:2021-05-20
本文以实例形式简单简述了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#程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了PHP设计模式之迭代器(Iterator)模式。分享给大家供大家参考,具体如下:迭代器有时又称光标(cursor)是程式设计的软件设计模式,可在容
迭代器(Iterator的对象)主要用于遍历集合,体现的就是迭代器模式。Iterator接口定义了以下四种方法。booleanhasNext():如果集合还没遍
本文实例讲述了PHP预定义接口——Iterator用法。分享给大家供大家参考,具体如下:Iterator(迭代器)接口可在内部迭代自己的外部迭代器或类的接口。接
迭代器Iterator接口1.迭代器接口Iterable内置方法iterator(),返回一个新建的Iterator。如:publicinterfaceIter
什么是迭代器模式?迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。何时使用迭代器模式?当需要访问一个聚合