0
点赞
收藏
分享

微信扫一扫

设计模式 迭代器模式(Iterator)


迭代器  在各种语言中 都有封装好的迭代器集合 比如c# list 

设计模式 迭代器模式(Iterator)_迭代器

迭代器图

举例子

 

电视和遥控器 电视如果没有遥控器 需要去电视控制面板 一个一个的换台  有遥控器就可以 在遥控器里直接按键  用来很方便 很解耦

Iterator

一个实体类 集合需要的对象 

俩个接口

一个是集合对象接口 包含创建操作集合方法接口对象方法 和返回集合对象方法

一个是操作集合方法接口 

 

public class Item
{
private string Name;
public Item(string _name)
{
this.Name = _name;
}

public string getName()
{
return Name;
}
}

 

public  interface TV
{
ArrayList contriner();
Iterator CreateIterator();
}

public interface Iterator
{
Item first();
Item next();
bool isDone();
Item CurrentItem();
}

 

class HrTV:TV
{
private ArrayList list;
public HrTV()
{
list = new ArrayList();
list.Add(new Item("山东卫视"));
list.Add(new Item("湖南卫视"));
list.Add(new Item("浙江卫视"));
list.Add(new Item("大连卫视"));
list.Add(new Item("山西卫视"));
}
public System.Collections.ArrayList contriner()
{
return list;
}

public Iterator CreateIterator()
{
return new Controller(list);
}
}

 

public class Controller:Iterator
{
private int index = 0;
private ArrayList list;
public Controller( ArrayList l )
{
list = l;
}
public Item first()
{
index = 0;
return (Item)list[index];
}

public Item next()
{
index ++;
return (Item)list[index];
}

public bool isDone()
{
return index >= list.Count - 1;
}

public Item CurrentItem()
{
return (Item)list[index];
}
}

 

 

static void Main(string[] args)
{
TV tv = new HrTV();
Iterator i = tv.CreateIterator();

Console.WriteLine(i.first().getName());
while (!i.isDone())
{
Console.WriteLine(i.next().getName());
}
Console.ReadKey();
}

设计模式 迭代器模式(Iterator)_迭代器_02

C# 使用自带迭代器

IEnumerable


记住这个思想 不要总想着怎么用代码实现它

明天看一下C#具体怎么使用迭代器 早睡记忆力好  晚安~

举报

相关推荐

0 条评论