什么是迭代器模式
定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部显示
下面是迭代器模式结构图:

下面的示例代码简单了解一下:
//抽象聚合类
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><p><strong>分析</strong>:想一下,如果把集合对象和对集合对象的操作放在一起,当我们想换一种方式遍历集合对象中元素时,就需要修改集合对象了,违背“单一职责原则”,而迭代器模式将数据结构和数据结构的算法分离开,两者可独立发展。</p>
<p><strong>优点:</strong></p>
<p>1.支持多种遍历方式。比如有序列表,我们根据需要提供正序遍历、倒序遍历两种迭代器。用户只需要得到我们的迭代器,就可以对集合执行遍历操作</p>
<p>2.简化了聚合类。由于引入了迭代器,原有的集合对象不需要自行遍历集合元素了</p>
<p>3.增加新的聚合类和迭代器类很方便,两个维度上可各自独立变化</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站"><img
src="https://img.php.cn/upload/skill/000/000/081/179040786932301.jpg" alt="btpanel phpsite 宝塔面板PHP网站" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="overflowclass">btpanel phpsite 宝塔面板PHP网站</a>
<p class="overflowclass">宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理</p>
</div>
<a rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<p>4.为不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上操作</p>
<p><strong>缺点:</strong></p>
<p>1.迭代器模式将存储数据和遍历数据的职责分离增加新的集合对象时需要增加对应的迭代器类,类的个数成对增加,在一定程度上增加系统复杂度</p>
<p><strong>使用场景:</strong></p>
<p>1.访问一个聚合对象内容而无须暴露它的内部显示</p>
<p>2.需要为聚合对象提供多种遍历方式</p>
<p>3.为遍历不同的聚合结构提供一个统一的接口</p>
<p> </p></aggregate.count></object></object>
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










