Unity 设计模式之 迭代器模式的实例介绍
1、迭代器模式:
提供一种方法顺序访问一个聚合对象中的各个元素,二又不暴露鬼对象的内部表示;

2、模式中的角色:
1)Iterator(迭代抽象类):用于定义得到开始对象、得到下一个对象、判断是否到结尾、当前对象等抽象方法,统一接口;
2)Aggregate(聚集抽象类):定义一个创建一个迭代器的抽象方法等;
3)ConcreteIterator(具体迭代器类):继承 Iterator ,实现开始、下一个、是否结尾、当前对象等方法;
4)ConcreteAggreggate(聚体聚集类):继承 Aggregate;
1、打开Unity,新建一个空工程,具体如下图

2、在工程中,新建几个脚本,然后双击打开,具体如下图

3、脚本的具体代码和代码说明如下图





4、Iterator 脚本具体内容如下:
public abstract class Iterator {
//用于定义得到开始对象,的倒下一个对象,判断是否到结尾
//当前对象等抽象方法,统一接口
public abstract object First ();
public abstract object Next();
public abstract bool IsDone ();
public abstract object CurrentItem ();
}
5、Aggregate 脚本具体内容如下:
public abstract class Aggregate {
//创建迭代器
public abstract Iterator CreateIterator ();
}
6、ConcreteIterator 脚本具体内容如下:
public class ConcreteIterator : Iterator {
//创建一个具体的聚集对象
private ConcreteAggregate aggregate;
private int current = 0;
//初始化时将具体的聚集对象传入
public ConcreteIterator(ConcreteAggregate aggregate){
this.aggregate = aggregate;
}
//等到聚集第一个对象
public override object First ()
{
return aggregate [0];
}
//等到聚集下一个对象
public override object Next ()
{
object ret = null;
current++;
if (current < aggregate.Count){
ret = aggregate [current];
}
return ret;
}
//判断当前是否比阿尼到结尾,到结尾返回true
public override bool IsDone ()
{
return current >= aggregate.Count ? true : false;
}
//返回当前的聚集对象
public override object CurrentItem ()
{
return aggregate [current];
}
}
7、ConcreteAggregate 脚本具体内容如下:
using System.Collections.Generic;
public class ConcreteAggregate : Aggregate {
//声明一个IList泛型变量,用于存放聚合对象
private IList<object> items = new List<object> ();
public override Iterator CreateIterator ()
{
return new ConcreteIterator (this);
}
//返回聚集总个数
public int Count{
get{
return items.Count;
}
}
//声明一个索引器
public object this[int index]{
get{ return items [index];}
set{ items.Insert (index, value); }
}
}
8、ConcreteAggregate 脚本具体内容如下:
using UnityEngine;
public class Test : MonoBehaviour {
ConcreteAggregate a;
// Use this for initialization
void Start () {
//创建一个聚合对象
a = new ConcreteAggregate();
a [0] = "帅哥";
a [1] = "美女";
a [2] = "大叔";
a [3] = "大婶";
//创建一个迭代器
Iterator i = new ConcreteIterator (a);
//遍历迭代器中所有成员
while(!i.IsDone ()){
Debug.Log (i.CurrentItem () + " 请买票");
i.Next ();
}
}
}
9、脚本编译正确,回到Unity界面,在场景中新建一个 GameObject,并把 Test 脚本赋给 GameObject,具体如下图

10、运行场景,控制台 Console 打印如下图

11、到此,《Unity 设计模式之 迭代器模式的实例介绍》讲解结束,谢谢