C#迭代器模式(Iterator Pattern)实例教程
程序员文章站
2023-12-16 23:11:40
本文以实例形式简单简述了c#迭代器模式的实现方法,分享给大家供大家参考。具体方法如下:
一般来说,迭代器模式的需求来自:需要对一些集合进行迭代,而迭代的方式可能有很多种。...
本文以实例形式简单简述了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#程序设计有所帮助。
推荐阅读