Unity 设计模式之 迭代器模式的实例介绍

2025-11-22 15:22:16

1、迭代器模式:

       提供一种方法顺序访问一个聚合对象中的各个元素,二又不暴露鬼对象的内部表示;

Unity 设计模式之 迭代器模式的实例介绍

2、模式中的角色:

       1)Iterator(迭代抽象类):用于定义得到开始对象、得到下一个对象、判断是否到结尾、当前对象等抽象方法,统一接口;

       2)Aggregate(聚集抽象类):定义一个创建一个迭代器的抽象方法等;

       3)ConcreteIterator(具体迭代器类):继承 Iterator ,实现开始、下一个、是否结尾、当前对象等方法;

       4)ConcreteAggreggate(聚体聚集类):继承 Aggregate;

1、打开Unity,新建一个空工程,具体如下图

Unity 设计模式之 迭代器模式的实例介绍

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

Unity 设计模式之 迭代器模式的实例介绍

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

Unity 设计模式之 迭代器模式的实例介绍

Unity 设计模式之 迭代器模式的实例介绍

Unity 设计模式之 迭代器模式的实例介绍

Unity 设计模式之 迭代器模式的实例介绍

Unity 设计模式之 迭代器模式的实例介绍

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,具体如下图

Unity 设计模式之 迭代器模式的实例介绍

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

Unity 设计模式之 迭代器模式的实例介绍

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢