迭代器模式

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

2.类型:行为型

3.适用场景:访问一个集合对象的内容而无需暴露它的内部表示;
        为遍历不同的集合结构提供一个统一的接口。

4.优点:分离了集合对象的遍历行为。

5.缺点:类的个数成对增加。

6.相关设计模式:访问者模式。

7.实例目录package

8.实例UML类图

9.代码

 1 package com.geely.design.pattern.behavioral.iterator;
 2 
 3 public class Course {
 4     private String name;
 5 
 6     public Course(String name) {
 7         this.name = name;
 8     }
 9 
10     public String getName(){
11         return name;
12     }
13 }
1 package com.geely.design.pattern.behavioral.iterator;
2 
3 public interface CourseIterator {
4     Course nextCourse();
5     boolean isLastCourse();
6 }
 1 package com.geely.design.pattern.behavioral.iterator;
 2 
 3 import java.util.List;
 4 
 5 public class CourseIteratorImpl implements CourseIterator {
 6 
 7     private List<Course> courseList;
 8     private int position;
 9     private Course course;
10 
11     public CourseIteratorImpl(List<Course> courseList) {
12         this.courseList = courseList;
13     }
14 
15     @Override
16     public Course nextCourse() {
17         System.out.println("返回课程,位置是:" + position);
18         course = courseList.get(position);
19         position++;
20         return course;
21     }
22 
23     @Override
24     public boolean isLastCourse() {
25         if(position < courseList.size()){
26             return false;
27         }
28         return true;
29     }
30 }
1 package com.geely.design.pattern.behavioral.iterator;
2 
3 public interface CourseAggregate {
4     void addCourse(Course course);
5     void removeCourse(Course course);
6     CourseIterator getCourseIterator();
7 }
 1 package com.geely.design.pattern.behavioral.iterator;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class CourseAggregateImpl implements CourseAggregate {
 7     private List<Course> courseList;
 8 
 9     public CourseAggregateImpl() {
10         this.courseList = new ArrayList<>();
11     }
12 
13     @Override
14     public void addCourse(Course course) {
15         courseList.add(course);
16     }
17 
18     @Override
19     public void removeCourse(Course course) {
20         courseList.remove(course);
21     }
22 
23     @Override
24     public CourseIterator getCourseIterator() {
25         return new CourseIteratorImpl(courseList);
26     }
27 }
 1 package com.geely.design.pattern.behavioral.iterator;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5         Course course1 = new Course("Java电商一期");
 6         Course course2 = new Course("Java电商二期");
 7         Course course3 = new Course("Java设计模式精讲");
 8         Course course4 = new Course("Python课程");
 9         Course course5 = new Course("算法课程");
10         Course course6 = new Course("前端课程");
11 
12         CourseAggregate courseAggregate = new CourseAggregateImpl();
13         courseAggregate.addCourse(course1);
14         courseAggregate.addCourse(course2);
15         courseAggregate.addCourse(course3);
16         courseAggregate.addCourse(course4);
17         courseAggregate.addCourse(course5);
18         courseAggregate.addCourse(course6);
19         
20         System.out.println("------------课程列表--------------");
21         printCourses(courseAggregate);
22 
23         courseAggregate.removeCourse(course4);
24         courseAggregate.removeCourse(course5);
25 
26         System.out.println("------------删除操作之后的课程列表--------------");
27         printCourses(courseAggregate);
28     }
29 
30     private static void printCourses(CourseAggregate courseAggregate) {
31         CourseIterator courseIterator = courseAggregate.getCourseIterator();
32         while(!courseIterator.isLastCourse()){
33             Course course = courseIterator.nextCourse();
34             System.out.println(course.getName());
35         }
36     }
37 }

 

posted @ 2019-01-06 16:59  逢春  阅读(109)  评论(0编辑  收藏  举报