登录  /  注册

php的迭代器是什么

ringa_lee
发布: 2023-03-15 12:18:01
原创
4168人浏览过

什么是迭代器模式

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

下面是迭代器模式结构图:

下面的示例代码简单了解一下:

    //抽象聚合类
    abstract class Aggregate
    { 
        public abstract Iterator CreateIterator();
    }    
    //具体聚合类
    class ConcreteAggregate : Aggregate
    {        
        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); }
        }
    }    
    //抽象迭代器类
    abstract class Iterator
    {        
        public abstract object First();        
        public abstract object Next();        
      public abstract bool IsDone();        
      public abstract object CurrentItem();
    }     
    //具体迭代器类
    class ConcreteIterator : Iterator
    {        
        private ConcreteAggregate aggregate;        
        private int Current = 0;        
        public ConcreteIterator(ConcreteAggregate aggregate)
        {            
        this.aggregate = aggregate;
        }        
        public override object CurrentItem()
        {            
            return aggregate[Current];
        }        
        public override object First()
        {            
            return aggregate[0];
        }        
        public override bool IsDone()
        {            
            return Current >= aggregate.Count ? true : false;
        }        
        public override object Next()
        {            
                object ret = null;
            Current++;            
            if(Current<aggregate.Count)
            {
                ret = aggregate[Current];
            }            
            return ret;
        }
    }     
    static void Main(string[] args)
        {
            ConcreteAggregate aggregate = new ConcreteAggregate();
            aggregate[0] = "michael";
            aggregate[1] = "jarle";
            aggregate[2] = "cumming";
            aggregate[3] = "andy";
            ConcreteIterator iterator = new ConcreteIterator(aggregate);
            iterator.First();            while (!iterator.IsDone())
            {
                Console.WriteLine($"{iterator.CurrentItem()},请打卡后再下班");
                iterator.Next();
            }
            Console.Read();
        }
登录后复制

分析:想一下,如果把集合对象和对集合对象的操作放在一起,当我们想换一种方式遍历集合对象中元素时,就需要修改集合对象了,违背“单一职责原则”,而迭代器模式将数据结构和数据结构的算法分离开,两者可独立发展。

优点:

1.支持多种遍历方式。比如有序列表,我们根据需要提供正序遍历、倒序遍历两种迭代器。用户只需要得到我们的迭代器,就可以对集合执行遍历操作

2.简化了聚合类。由于引入了迭代器,原有的集合对象不需要自行遍历集合元素了

3.增加新的聚合类和迭代器类很方便,两个维度上可各自独立变化

4.为不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上操作

缺点:

1.迭代器模式将存储数据和遍历数据的职责分离增加新的集合对象时需要增加对应的迭代器类,类的个数成对增加,在一定程度上增加系统复杂度

使用场景:

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

2.需要为聚合对象提供多种遍历方式

3.为遍历不同的聚合结构提供一个统一的接口

 

以上就是php的迭代器是什么的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学