迭代器模式

定义:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。

优点:
    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);
				}
			}
		}
	}
}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值