来说说(Iterator)迭代器模式

1,动机。

 在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“ 同一种算法在多种集合对象上进行操作”提供了可能。

2,实用性

1.访问一个聚合对象的内容而无需暴露它的内部表示。

2.支持对聚合对象的多种遍历。

3 .为遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。

3,生活中的例子:

  迭代器提供一种方法顺序访问一个集合对象中各个元素,而又不需要暴露该对象的内部表示。在早期的电视机中,一个拨盘用来改变频道。当改变频道时,需要手工转动拨盘移过每一个频道,而不论这个频道是否有信号。现在的电视机,使用[后一个]和[前一个]按钮。当按下[后一个]按钮时,将切换到下一个预置的频道。想象一下在陌生的城市中的旅店中看电视。当改变频道时,重要的不是几频道,而是节目内容。如果对一个频道的节目不感兴趣,那么可以换下一个频道,而不需要知道它是几频道。

4,代码实现

using System;
using UnityEngine;

/// <summary>
/// 抽象聚集
/// </summary>
public interface  IList
{
	Iterator  GetIterator();
}
	
/// <summary>
/// 抽象迭代器
/// </summary>
public interface Iterator
{
	bool MoveNext();
	object CurrentItem();

	void First();

	void  Next();
}


public class ConcreateList : IList{
	int [] list;

	public ConcreateList()
	{
		list = new int[] { 1,2,3,4,5};
	}

	public Iterator GetIterator()
	{
		return new ConcreateIterator (this);
	}

	public int Length
	{
		get{ return list.Length; }
	}

	public int GetElement(int index)
	{
		return list[index];
	}
}

public class ConcreateIterator : Iterator
{
	private ConcreateList list;

	private int index;

	public ConcreateIterator(ConcreateList  list)
	{
		this.list = list;
		index = 0;
	}

	public bool MoveNext()
	{
		if (index < list.Length) {
			return true;
		} else {
			return false;
		}
	}

	public object CurrentItem()
	{
		return list.GetElement (index);
	}

	public void First()
	{
		index = 0;
	}
	public void Next()
	{
		if (index < list.Length) {
			index++;
		}
	}
}


class  ProgramMain
{
	static void ProMain(string[] args)
	{
		Iterator iterator;
		IList list = new ConcreateList ();
		iterator = list.GetIterator ();

		while(iterator.MoveNext())
		{
			int i = (int)iterator.CurrentItem ();
			Debug.Log ("item id :"+i.ToString());
			iterator.Next ();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值