1    代码演练

1.1  代码演练1(迭代器模式演练)

1.2  代码使用场景

1    代码演练
1.1  代码演练1(迭代器模式演练)

需求:

课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表。

uml类图:

测试类:

  1. package com.geely.design.pattern.behavioral.iterator;
  2.  
  3. public class Test {
  4. public static void main(String [] args){
  5. //新增6个课程
  6. Course course1 = new Course("java电商一期");
  7. Course course2 = new Course("java电商二期");
  8. Course course3 = new Course("java电商三期");
  9. Course course4 = new Course("java前端HTML一期");
  10. Course course5 = new Course("java前端HTML二期");
  11. Course course6 = new Course("java设计模式一期");
  12.  
  13. //将6个课程放到list中去
  14. CourseAggregate courseAggregate = new CourseAggregateImpl();
  15. courseAggregate.addCourse(course1);
  16. courseAggregate.addCourse(course2);
  17. courseAggregate.addCourse(course3);
  18. courseAggregate.addCourse(course4);
  19. courseAggregate.addCourse(course5);
  20. courseAggregate.addCourse(course6);
  21.  
  22. print(courseAggregate);
  23.  
  24. courseAggregate.removeCourse(course1);
  25. courseAggregate.removeCourse(course3);
  26. print(courseAggregate);
  27. }
  28.  
  29. /**
  30. * 此方法 传入CourseAggregate而不是CourseIterator 比较好,
  31. * 如果传入 CourseIterator ,CourseIterator 只能此初始化一次,也就是只能打印一个循环
  32. * @param courseAggregate
  33. */
  34. public static void print(CourseAggregate courseAggregate){
        //正常代码中,我们直接写getIterator()就可以了,代码规范通常它们获取得的直接是变量的迭代器
  35. CourseIterator courseIterator = courseAggregate.getCourseIterator();
  36. while (!courseIterator.isLastCourse()){
  37. Course course = courseIterator.nextCourse();
  38. System.out.println(course.getName());
  39. }
  40. System.out.println("===========================================================");
  41.  
  42. }
  43. }

实体类(课程):

  1. package com.geely.design.pattern.behavioral.iterator;
  2.  
  3. /**
  4. * 迭代器实体类
  5. */
  6. public class Course {
  7.  
  8. /**
  9. * 方便for循环打印使用
  10. */
  11. public String getName() {
  12. return name;
  13. }
  14.  
  15. private String name;//定义属性名称
  16.  
  17. /**
  18. * 方便注值使用
  19. * @param name
  20. */
  21. public Course(String name) {
  22. this.name = name;
  23. }
  24. }

课程迭代接口:

  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.ArrayList;
  4. import java.util.List;
  5.  
  6. public class CourseIteratorImpl implements CourseIterator{
  7. private List listCourseAggre ;
  8. private int position;
  9. private Course course;
  10. public CourseIteratorImpl(List listCourseAggre) {
  11. this.listCourseAggre = listCourseAggre;
  12. }
  13.  
  14. @Override
  15. public Course nextCourse() {
  16. System.out.println("返回课程位置"+position);//第一次,没有值,默认为0
  17. course = (Course) listCourseAggre.get(position);
  18. position++;
  19. return course;
  20. }
  21.  
  22. @Override
  23. public boolean isLastCourse() {
  24. if(position<listCourseAggre.size()){
  25. return false;
  26. }else{
  27. return true;
  28. }
  29. }
  30.  
  31. }

课程列表调用接口:

  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.  
  8. private List list1;
  9. public CourseAggregateImpl() {
  10. this.list1 = new ArrayList();
  11. }
  12.  
  13. @Override
  14. public void addCourse(Course course) {
  15. list1.add(course);
  16. }
  17. @Override
  18. public void removeCourse(Course course) {
  19. list1.remove(course);
  20. }
  21.  
  22. @Override
  23. public CourseIterator getCourseIterator() {
  24. return new CourseIteratorImpl(list1);
  25. }
  26. }

打印结果:

  1. 返回课程位置0
  2. java电商一期
  3. 返回课程位置1
  4. java电商二期
  5. 返回课程位置2
  6. java电商三期
  7. 返回课程位置3
  8. java前端HTML一期
  9. 返回课程位置4
  10. java前端HTML二期
  11. 返回课程位置5
  12. java设计模式一期
  13. ===========================================================
  14. 返回课程位置0
  15. java电商二期
  16. 返回课程位置1
  17. java前端HTML一期
  18. 返回课程位置2
  19. java前端HTML二期
  20. 返回课程位置3
  21. java设计模式一期
  22. ===========================================================
  23.  
  24. Process finished with exit code 0

 1.2  代码使用场景

通常不用我们自己写迭代器,jdk代码中都帮我们写好了

  1.  

设计模式课程 设计模式精讲 18-2 迭代器模式coding的更多相关文章

  1. 设计模式课程 设计模式精讲 13-2 享元模式coding

    1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 每周由随机部门经历做报告: 重点关注: a 该案例是单例模式和享元模式共同使用 b 外部传入的department是外部状态 ...

  2. 设计模式课程 设计模式精讲 11-2 装饰者模式coding

    1 代码演练 1.1 代码演练1(未使用装饰者模式) 1.2 代码演练2(使用装饰者模式) 1 代码演练 1.1 代码演练1(未使用装饰者模式) 需求: 大妈下班卖煎饼,加一个鸡蛋加一元,一个火腿两元 ...

  3. 设计模式课程 设计模式精讲 7-2 建造者模式Coding

    1 代码演练 1.1 建造者模式演练 1.2 静态内部类演练建造者模式(链式调用) 1 代码演练 1.1 建造者模式演练 需求: 根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作 ...

  4. 设计模式课程 设计模式精讲 17-2 模板方法模式coding

    1 代码演练 1.1 代码演练1 1.2 代码演练2(后端课程子类运用钩子方法,加入写手记的方法) 1.3 代码演练3(前端有多个子类,有得需要写手记,有得不需要写,如何实现?) 1 代码演练 1.1 ...

  5. 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)

    上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ...

  6. 设计模式学习笔记(十六)迭代器模式及其在Java 容器中的应用

    迭代器(Iterator)模式,也叫做游标(Cursor)模式.我们知道,在Java 容器中,为了提高容器遍历的方便性,把遍历逻辑从不同类型的集合类中抽取出来,避免向外部暴露集合容器的内部结构. 一. ...

  7. 设计模式(十五):Iterator迭代器模式 -- 行为型模式

    1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用 ...

  8. CSharp设计模式读书笔记(17):迭代器模式(学习难度:★★★☆☆,使用频率:★★★★★)

    迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor). 模式角色与结构: 实现代码: using System; us ...

  9. [Python设计模式] 第20章 挨个买票——迭代器模式

    github地址:https://github.com/cheesezh/python_design_patterns 迭代器模式 迭代器模式,提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该 ...

随机推荐

  1. 【visio】 图片

    1.背景页设置 新建背景页:新建页面>设计>页面设置>页属性      使用背景页:在页属性页的"背景" 选项里,选择需要的背景. 2.插入图片 支持插入本地图片 ...

  2. linux创建用户组、用户

    创建用户组 groupadd -g 1024 nameinfo 创建用户 首先创建目录 mkdir -p /home 创建用户 useradd -g nameinfo -u 1024 -d /home ...

  3. 【C语言】无参函数调用实例

    #include<stdio.h> void hello() { printf("年轻人,加油!"); } int main() { hello(); ; }

  4. python 处理html文本的中文字符gbk转utf-8

    #中文字符gbk转utf-8 def gbk2utf8(self,raw): rs=raw.encode('raw_unicode_escape') #转为机器识别字符串 s=repr(rs) ss= ...

  5. js中的局部函数和全局函数的调用

    //局部函数和全局函数的特点 function fc1(){ var name ="chenhao"; function fc2(){ var age = 30; alert(na ...

  6. springmvc基于java配置的实现

    该案例的github地址:https://github.com/zhouyanger/demo/tree/master/springmvc-noxml-demo 1.介绍 之前搭建SpringMvc项 ...

  7. Python基础模块整理

    1.shutil   :可以用来对文件进行基本操作(拷贝,剪切等) 2.glob    :提供了一个函数用于从目录通配符搜索中生成文件列表 3.datetime    :日期和时间的处理 4.zlib ...

  8. redis基本操作,基于StringRedisTemplate,存储,取值,设置超时时间,获取超时时间,插入list操作

    @Autowired private StringRedisTemplate stringRedisTemplate; @GetMapping("/test") void test ...

  9. docker环境下mysql数据库的备份

    #! /bin/bash DATE=`date +%Y%m%d%H%M%S` BACK_DATA=erp-${DATE}.sql #导出表结构,不包括表数据 #docker exec -i xin-m ...

  10. LeetCode.62——不同路径

    问题描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...