定义:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
优点:
1、它支持以不同的方式遍历一个聚合对象。
2、迭代器简化了聚合类。
3、在同一个聚合上可以有多个遍历。
4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
namespace ConsoleApp1
{
//迭代器接口
public interface Iterator
{
bool HasNext();
object Next();
}
//菜单项
public class MenuItem
{
public string Name
{
set;
get;
}
public float Price
{
set;
get;
}
public MenuItem(string name, float price)
{
Name = name;
Price = price;
}
}
//菜单列表
public class CakeMenuIterator : Iterator
{
private List<MenuItem> menuItems;
public CakeMenuIterator()
{
menuItems = new List<MenuItem>();
AddItem("姜味香芒蛋糕", 40);
AddItem("云石芝士蛋糕", 60);
}
private void AddItem(string name, float price)
{
MenuItem menuItem = new MenuItem(name, price);
menuItems.Add(menuItem);
}
private int position = 0;
public bool HasNext()
{
if (position < menuItems.Count)
{
return true;
}
return false;
}
public Object Next()
{
MenuItem menuItem = menuItems[position];
position++;
return menuItem;
}
};
class Program
{
static void Main(string[] args)
{
List<Iterator> iterators = new List<Iterator>();
iterators.Add(new CakeMenuIterator());
for (int i = 0; i < iterators.Count; i++)
{
Iterator iterator = iterators[i];
while (iterator.HasNext())
{
MenuItem menuItem = (MenuItem)iterator.Next();
Console.WriteLine(menuItem.Name + "***" + menuItem.Price);
}
}
}
}
}