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

												

设计模式课程 设计模式精讲 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. 6、Maven仓库

    在Maven的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程.jar文件,library jar文件,插件或者任何其他的工程指定的文件 Maven仓库有三种类型 本地(local) ...

  2. JQuery checkbox多选框组选中提交,当选择某(无)一项,其他项禁止选中

    在项目中难免会遇到一些表单的提交,尤其是多选框中,当用户选择了某一项时,禁止其他项的选择.所以为了避免这样的冲突,所以我们前端就得控制一下了,下面就来个简单demo,记录一下,有需要的伙伴可以拿去耍耍 ...

  3. Java补强转

    /* 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围, 那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char). 1. 如果没有超过左侧 ...

  4. 初探three.js几何体-Geometry

    three.js几何体我们还没有说完,这一节我们说一说THREE.Geometry(),简单几何体都是继承了这个对象,使用它会相对麻烦一些,但是可操作性非常高,今天我们使用它制作一个自定义几何体-五角 ...

  5. 【笔记2-环境配置及初始化】从0开始 独立完成企业级Java电商网站开发(服务端)

    准备工作 Linux系统安装 云服务器部署 概要 申请和配置 域名的购买.解析.配置.绑定流程 用户创建实操 环境安装及部署 JDK.Tomcat.Maven下载安装及配置 vsftpd下载安装及配置 ...

  6. openjudge(POJ)-1664 放苹果

    对于n个盘子,m个苹果,我们要么在每个盘子上都放苹果,要么至少有一个盘子不放. 一个盘子不放就是f(m,n-1),全部都放的时候苹果就变成了n-m个,但是盘子的数目是不变的,因为此时还没有产生方案数, ...

  7. 【代码审计】VAuditDemo 命令注入漏洞

    一般PHP中可以使用下列函数来执行外部的应用程序或命令 system() exec() passthru() shell_exec() 跟踪$cmd --> 跟进$target,发现传递给tar ...

  8. 一个含有Fibonacci Number的级数

    \[\Large\displaystyle \sum_{n=0}^\infty \frac{1}{F_{2n+1}+1}=\frac{\sqrt5}{2}\] \(\Large\mathbf{Proo ...

  9. 基于docker的以太坊集群的私有链开发环境

    转载博文:https://www.jianshu.com/p/8af386ec5f9e https://www.jianshu.com/p/7994db7a2b89?from=singlemessag ...

  10. 洛谷P1140 相似基因(线性DP)

    题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了444种核苷酸,简记作A,C,G,TA,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类 ...