2019独角兽企业重金招聘Python工程师标准>>>

模式用途:设计能装载任意对象的容器,并要求该容器有一个遍历元素的iterator()方法,用来遍历容器中的每个元素。

设计一个容器的接口,用来定义这些”能装载任意对象的容器”的方法,从而在使用这些容器的时候可以更加灵活,更换起来只需要更改装载的容器的类型即可,其他方法都不用改变。

Ø  接口Collection.java

package com.yilong.designpattern.iterator;

public interface Collection {

public void add(Object obj);

public int size();

public Iterator iterator();

}

Ø  实现了Collection接口的ArrayList.java

package com.yilong.designpattern.iterator;

public class ArrayList implements Collection {

Object[] objs = new Object[10];

int index = 0;

public void add(Object obj) {

if(index == objs.length) {

Object[] newObjs = new Object[objs.length * 2];

System.arraycopy(objs, 0, newObjs, 0, objs.length);

objs = newObjs;

}

objs[index] = obj;

index ++;

}

public Iterator iterator() {

return new ArrayIterator(this);

}

public int size() {

return index;

}

public Object get(int i) {

return objs[i];

}

}

说明:System.arraycopy(objs, 0, newObjs, 0, objs.length);表示把objs数组中索引为0-objs.length的元素复制到数组newObjs中,第一个0表示从newObjs的0位置开始复制。

容器的iterator()方法会调用适合本身容器进行遍历的迭代器Iterator。

还需要注意的一点是get(int i)方法不要放在Collection接口的方法定义中,因为Collection接口已经有iterator()方法足以遍历容器中元素了, 可见get(int i)方法并不是每种容器都必须的,因此更加适合于只定义在具体的容器中。

Ø  迭代器接口Iterator.java

package com.yilong.designpattern.iterator;

public interface Iterator {

public boolean hasNext();

public Object next();

}

说明:该接口主要有两个方法,一个是判断容器中是否还有下一个元素的hasNext(),另一个是取出容器中下一个元素next()方法。

Ø  实现了Iterator接口的ArrayIterator.java

package com.yilong.designpattern.iterator;

public class ArrayIterator implements Iterator{

private ArrayList arrayList;

private int index = 0;

ArrayIterator(ArrayList arrayList) {

this.arrayList = arrayList;

}

public boolean hasNext() {

if(this.index < this.arrayList.size()) {

return true;

} else {

return false;

}

}

public Object next() {

Object obj = arrayList.get(this.index);

this.index ++;

return obj;

}

}

说明:主要用以对ArrayList容器进行遍历的iterator类。

Ø  Book.java

package com.yilong.designpattern.iterator;

public class Book {

private String bookName;

public Book(String bookName) {

this.bookName = bookName;

}

public String getBookName() {

return bookName;

}

public void setBookName(String bookName) {

this.bookName = bookName;

}

}

Ø  Main.java

package com.yilong.designpattern.iterator;

public class Main {

public static void main(String[] args) {

Collection objList = new ArrayList();

objList.add(new Book("《名侦探柯南》"));

objList.add(new Book("《游戏王》"));

objList.add(new Book("《三国演义》"));

Iterator iterator = objList.iterator();

while(iterator.hasNext()) {

Book book = (Book)iterator.next();

System.out.println(book.getBookName());

}

}

}

    该设计模式的UML图如下:

说明:JDK的Iterator与上述的设计原理完全一样,因此测试的代码可以直接copy上述的代码,只需要引入具体的包即可。

Ø  Main.java

package com.yilong.test.jdk.iterator;

import java.util.ArrayList;

import

转载于:https://my.oschina.net/lovedreamland/blog/12998

设计模式 - Iterator(迭代器)相关推荐

  1. [C# 设计模式] Iterator - 迭代器模式:我与一份奥利奥早餐的故事

    Iterator - 迭代器模式 目录 前言 回顾 UML 类图 代码分析 抽象的 UML 类图 思考 前言 这是一包奥利奥(数组),里面藏了很多块奥利奥饼干(数组中的元素),我将它们放在一个碟子上慢 ...

  2. 设计模式之迭代器模式(Iterator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  3. Java设计模式 (1) —— Iterator迭代器模式

    拿到这个话题,首先搞清楚:什么是迭代器? 大家都学过 for-i 循环,for-i循环的本质就是 通过i++ 或者 i-- ,以实现 从数据的一端 一个一个地遍历数据元素,直到另一端的最后一个元素,将 ...

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

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

  5. [导入]C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式.zip(8.04 MB)...

    讲座内容: 本培训课程探讨GoF23之 Iterator 迭代器模式的意图.动因.原理.应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用. 课程讲师: 李建忠 上海祝成信息科技有限 ...

  6. .Net中的设计模式——Iterator模式

    在.Net中,我们很少有机会使用Iterator模式,因为.Net Framework已经运用Iterator模式为所有的集合对象实现了迭代器.我们在遍历集合对象时,喜欢使用C#提供的foreach语 ...

  7. 设计模式复习-迭代器模式

    Iterator.H #pragma once #include <list> #include <windows.h> using namespace std;/* 设计模式 ...

  8. 【GOF23设计模式】迭代器模式

    [GOF23设计模式]迭代器模式 来源:http://www.bjsxt.com/  一.[GOF23设计模式]_迭代器模式.JDK内置迭代器.内部类迭代器 1 package com.test.it ...

  9. [转载] Python进阶:设计模式之迭代器模式

    参考链接: Python中的迭代器 在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一 ...

最新文章

  1. 网络营销——浅析网站改版之后对网站展开新的网络营销有哪些影响?
  2. 4个空格和一个tab有什么区别_生姜泡水喝有什么作用?一个月之后,身体有这4个变化...
  3. poj 2507Crossed ladders 计算几何
  4. SQLServer LIKE 通配符
  5. 跑步与读书都废掉了...工作目前也在换新的.
  6. Select prototyping tools
  7. Polyverse Infected Mushroom Bundle Mac(声音处理器插件包)
  8. String 类实现 以及 流插入/流提取运算符重载
  9. 《博客页面制作》教程
  10. 计算机应用技术中的c语言,C语言程序设计——Visual C++6.0(高等院校计算机应用技术系列教材)...
  11. 北邮矩阵论- 第1章 1.3两个特殊的线性空间
  12. 关于 Unbalanced calls to begin/end appearance transitions
  13. 共享单车来了,自行车道没了
  14. 3D视觉感知市场规模现状及行业发展前景分析
  15. 阿里推出阿里云网盘APP,下载速度远超百度网盘
  16. Linux文件系统管理——创建与检测
  17. 开放redis指定端口连接方法
  18. Oracle与SQL *PLUS简介
  19. Photoshop touch教程全攻略
  20. 人生最应该坚持的5件事

热门文章

  1. 手写简单的双向数据绑定
  2. Kubernetes故障问题
  3. centos 安装 rabbitMq
  4. Spring5源码解析-Spring中的异步事件
  5. 单点登录(SSO)—简介
  6. 发现一个很好的工具——VNN
  7. initrd映像文档的作用和制作
  8. WPF MvvmLight简单实例(1) 页面导航
  9. 技术专家预测未来25大颠覆性硬趋势
  10. C#和Javascript间互转的Xxtea加解密