1 代码演练
1.1 代码演练1(迭代器模式演练)
1.2 代码使用场景
1 代码演练
1.1 代码演练1(迭代器模式演练)
需求:
课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表。
uml类图:
测试类:
package com.geely.design.pattern.behavioral.iterator; public class Test { public static void main(String [] args){ //新增6个课程 Course course1 = new Course("java电商一期"); Course course2 = new Course("java电商二期"); Course course3 = new Course("java电商三期"); Course course4 = new Course("java前端HTML一期"); Course course5 = new Course("java前端HTML二期"); Course course6 = new Course("java设计模式一期"); //将6个课程放到list中去 CourseAggregate courseAggregate = new CourseAggregateImpl(); courseAggregate.addCourse(course1); courseAggregate.addCourse(course2); courseAggregate.addCourse(course3); courseAggregate.addCourse(course4); courseAggregate.addCourse(course5); courseAggregate.addCourse(course6); print(courseAggregate); courseAggregate.removeCourse(course1); courseAggregate.removeCourse(course3); print(courseAggregate); } /** * 此方法 传入CourseAggregate而不是CourseIterator 比较好, * 如果传入 CourseIterator ,CourseIterator 只能此初始化一次,也就是只能打印一个循环 * @param courseAggregate */ public static void print(CourseAggregate courseAggregate){
//正常代码中,我们直接写getIterator()就可以了,代码规范通常它们获取得的直接是变量的迭代器 CourseIterator courseIterator = courseAggregate.getCourseIterator(); while (!courseIterator.isLastCourse()){ Course course = courseIterator.nextCourse(); System.out.println(course.getName()); } System.out.println("==========================================================="); } }
实体类(课程):
package com.geely.design.pattern.behavioral.iterator; /** * 迭代器实体类 */ public class Course { /** * 方便for循环打印使用 */ public String getName() { return name; } private String name;//定义属性名称 /** * 方便注值使用 * @param name */ public Course(String name) { this.name = name; } }
课程迭代接口:
package com.geely.design.pattern.behavioral.iterator; public interface CourseIterator { Course nextCourse(); boolean isLastCourse(); }
课程迭代实现:
package com.geely.design.pattern.behavioral.iterator; import java.util.ArrayList; import java.util.List; public class CourseIteratorImpl implements CourseIterator{ private List listCourseAggre ; private int position; private Course course; public CourseIteratorImpl(List listCourseAggre) { this.listCourseAggre = listCourseAggre; } @Override public Course nextCourse() { System.out.println("返回课程位置"+position);//第一次,没有值,默认为0 course = (Course) listCourseAggre.get(position); position++; return course; } @Override public boolean isLastCourse() { if(position<listCourseAggre.size()){ return false; }else{ return true; } } }
课程列表调用接口:
package com.geely.design.pattern.behavioral.iterator; public interface CourseAggregate { void addCourse(Course course); void removeCourse(Course course); CourseIterator getCourseIterator(); }
课程列表调用实现:
package com.geely.design.pattern.behavioral.iterator; import java.util.ArrayList; import java.util.List; public class CourseAggregateImpl implements CourseAggregate { private List list1; public CourseAggregateImpl() { this.list1 = new ArrayList(); } @Override public void addCourse(Course course) { list1.add(course); } @Override public void removeCourse(Course course) { list1.remove(course); } @Override public CourseIterator getCourseIterator() { return new CourseIteratorImpl(list1); } }
打印结果:
返回课程位置0 java电商一期 返回课程位置1 java电商二期 返回课程位置2 java电商三期 返回课程位置3 java前端HTML一期 返回课程位置4 java前端HTML二期 返回课程位置5 java设计模式一期 =========================================================== 返回课程位置0 java电商二期 返回课程位置1 java前端HTML一期 返回课程位置2 java前端HTML二期 返回课程位置3 java设计模式一期 =========================================================== Process finished with exit code 0
1.2 代码使用场景
通常不用我们自己写迭代器,jdk代码中都帮我们写好了
诸葛