迭代器模式定义:
迭代器模式,也称为光标模式,提供按顺序访问集合/容器对象元素的方法。 不需要公开收藏的内部表现。
迭代器样式是可操作的设计样式,其可以向不同容器提供一致的遍历操作而不考虑容器中元件的结构。
迭代器模型的本质是将集合对象的迭代行为与迭代器分离,并提供一致的访问接口。
迭代器模式应用方案:
访问集合对象的内容,而不公开集合对象的内部表示。
提供用于遍历不同集合结构的统一访问接口。
迭代器模式UML类图:
从上图中可以看出,迭代器模型主要包括四个角色。
抽象迭代器(Iterator ) :抽象迭代器定义用于访问和遍历元素的接口。
迭代器:提供特定元素的遍历行为。
抽象容器(IAggregate ) :负责定义提供特定迭代器的接口。
具体容器:创建具体迭代器。
手写集合迭代器:
一般来说,迭代器的模型非常简单。 在此,以导线路径为例,创建路径的集合。 集合中的每个元素都是课程的对象
然后手写迭代器,读取所有课程对象的信息。
首先,创建集合元素Course类。
public class course { privatestring name; 公共计数(string name ) {this.name=name;
}publicString getName () {returnname;
}
}
接下来,创建自定义迭代器界面。
公共接口迭代器{
E next (; 布尔型hasnext (;
}
主要是定制创建集合的ICourseAggregate界面,以定义集合的特定规范并指定迭代器对象。
publicinterfaceicourseaggregate (void add ) coursecourse; voidremove(coursecourse;
迭代器迭代器(;
}
接下来分别安装迭代器和集合接口。
publicclassiteratorimplimplementsiterator { privatelistlist; private intcursor; 权限元素; publiciteratorimpl(listlist ) {this.list=list;
}publicE next () ) {
System.out.print ('当前位置' cursor ' : ' );
element=list.get(cursor;
cursor; 返回元素;
}public booleanhasNext () if ) cursorlist.size )- 1 ) {return false;
}return true;
}
}
publicclasscourseaggregateimplimplementsicourseaggregate { privatelistcourselist; publiccourseaggregateimpl ((this.course list=new ArrayList ) );
}公共void add (course course ) )
courselist.add(course;
}公共void remove (course course ) )
courselist.remove(course;
}公共迭代器() returnnewiteratorimpl ) courselist );
}
}
最后编写客户端测试代码。
public class test { publicstaticvoidmain (string [ ] args ) }
courseJava=newcourse(Java架构);
courseJavabase=newcourse(Java基础知识);
Course design=new Course (设计模式);
Course ai=new Course (人工智能);
icourseaggregateaggregate=newcourseaggregateimpl (;
aggregate.add(Java;
aggregate.add(Javabase;
aggregate.add(design;
aggregate.add(AI );
system.out.println ((=====================) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。
打印计数(aggregate;
aggregate.remove(AI;
system.out.println ((=================) () ) ) ) ) ) ) )删除操作后的课程列表。
打印计数(aggregate;
} privatestaticvoidprintcourse (icourseaggregateaggregate ) {
Iterator i=aggregate.iterator (; wile(I.Hasnext ) ) ) )。
Course course=i.next (;
system.out.println(《" + course.getName() + "》 );
}
}
}
迭代器模式的优点:
多态迭代:为不同的聚合结构提供一致的扫描接口。 这意味着一个迭代接口可以访问不同的集合对象。
简化集合对象接口:迭代器模型将集合对象属性本身应该提供的元素迭代接口抽象到迭代器中,这样集合对象就不必在意特定的迭代行为。
元素重复功能的多样化:每个集合对象可以提供多个不同的迭代器,因此同一元素的聚合结构可以具有不同的重复行为。
解耦迭代和集合:迭代子模式封装了具体的迭代算法,迭代算法的变化不影响集合对象的结构。
迭代器模式的缺点:
简单的导线测量(如数组和排序列表)会使用迭代器进行导线测量,这一点很复杂。
在日常开发中,几乎不需要自己写迭代器。 开放源代码框架提供的API已经足够了,除非您定制了与自己实现的数据结构对应的迭代器。