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代码中都帮我们写好了

												

最新文章

  1. yum源安装Mysql
  2. JS 跳转页面 在新的选项卡打开
  3. Xshell与securecrt之间不同
  4. Codeforces Round #103 (Div. 2) D. Missile Silos(spfa + 枚举边)
  5. tableView和scrollView滚动起冲突
  6. AX2012 DMF数据导入的问题
  7. 收藏的Android非常好用的组件或者框架。
  8. panels能否包含views_block ////// panels -- content pane 参数传递
  9. 引擎设计跟踪(九.14.2c) 最近一些小的更新
  10. 迁移到MariaDB galera
  11. MyEclipse 安装activiti designer
  12. android调试系列--使用ida pro调试so
  13. 存储过程中调用EXECUTE IMMEDIATE的“权限不足”问题
  14. 通用性站点管理后台(Bee OPOA Platform)
  15. Redis分布式锁的正确实现方式
  16. ABP中针对sql2008的数据库配置
  17. Android 设备,如何root,执行adb shell,查看设备中的数据库信息等【转】
  18. ElasticSearch客户端注解使用介绍
  19. 无法在类...中找到资源&quot;.bmp&quot;
  20. zookeeper集群查看状态时报错Error contacting service. It is probably not running的一些坑以及解决办法

热门文章

  1. [转]Serverless
  2. Android SDK Tools,Platform-tools,Build-tools分别有什么作用?
  3. 【PAT甲级】1083 List Grades (25 分)
  4. 自己实现java中Iterator(迭代器功能)
  5. C:clock() 计算代码执行时间
  6. Kubernetes的控制器之Deployment的定义
  7. intellij idea 整合springboot和mybatis
  8. 【原】linux两台服务器之间免密登录方法
  9. mcast_join函数
  10. LinkList(链表)