java设计模式之迭代器模式
发布时间:2020-12-14 04:41:26 所属栏目:百科 来源:网络整理
导读:迭代器模式的定义: 迭代器模式又叫作游标模式,它提供一种按顺序访问集合/容器对象元素的一种方法,而又无须暴露集合内部表示。 迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内元素的组成结构,属于行为型设计模式。 迭代器模式的本质是
迭代器模式的定义:迭代器模式又叫作游标模式,它提供一种按顺序访问集合/容器对象元素的一种方法,而又无须暴露集合内部表示。 迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内元素的组成结构,属于行为型设计模式。 迭代器模式的本质是把集合对象的迭代行为抽离到迭代器中,提供一致的访问接口。 迭代器模式的应用场景:
迭代器模式的UML类图:
? 由上图可以看到,迭代器模式主要包含4个角色。
手写自定义的集合迭代器:总体来说,迭代器模式是非常简单的。这里以遍历课程为例,我们创建一个课程集合,集合中的每一个元素都是课程对象, 然后手写一个迭代器,将每一个课程对象的信息都读出来。 首先创建集合元素Course类。 public class Course { private String name; public Course(String name) { this.name = name; } String getName() { return name; } } 然后创建自定义迭代器Iterator接口。 interface Iterator<E> { E next(); boolean hasNext(); } 创建自定义的课程集合ICourseAggregate接口,该接口主要是定义集合的一些规范,并指定迭代器对象。 interface ICourseAggregate { void add(Course course); remove(Course course); Iterator<Course> iterator(); } 接着分别实现迭代器接口和集合接口。 class IteratorImpl<E> implements Iterator<E> { private List<E> list; private int cursor; E element; public IteratorImpl(List<E> list) { this.list = list; } E next() { System.out.print("当前位置 " + cursor + " : "); element = list.get(cursor); cursor++; element; } hasNext() { if (cursor > list.size() - 1) { return false; } true; } } class CourseAggregateImpl implements List courseList; CourseAggregateImpl() { this.courseList = new ArrayList(); } add(Course course) { courseList.add(course); } remove(Course course) { courseList.remove(course); } public Iterator<Course> iterator() { new IteratorImpl<Course>(courseList); } } 最后编写客户端测试代码。 Test { static main(String[] args) { Course java = new Course("Java架构"); Course javaBase = new Course("Java基础"); Course design = new Course("设计模式"); Course ai = new Course("人工智能"); ICourseAggregate aggregate = CourseAggregateImpl(); aggregate.add(java); aggregate.add(javaBase); aggregate.add(design); aggregate.add(ai); System.out.println("===========课程列表=========="); printCourse(aggregate); aggregate.remove(ai); System.out.println("===========删除操作之后的课程列表=========="); printCourse(aggregate); } printCourse(ICourseAggregate aggregate) { Iterator<Course> i = aggregate.iterator(); while (i.hasNext()) { Course course = i.next(); System.out.println("《" + course.getName() + "》"); } } } 迭代器模式的优点:
? 迭代器模式的缺点:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |