Java Iterator模式
Iterator迭代器的定义:迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
直接看代码分析理解:
接口Iterator集合迭代器
/**
* @Acthor:
* @ClassName:Iterator
* @Description:循环遍历
*/
public interface Iterator {
boolean hasNext();
Object next();
}
接口Aggregate生成集合迭代器
/**
* @Acthor:
* @ClassName:Aggregate
* @Description:该接口生成遍历集合的迭代器
*/
public interface Aggregate {
Iterator iterator() ;
}
遍历集合对象book
/**
* @Acthor:
* @ClassName:book
* @Description:遍历对象是书
*/
public class book {
private String name;
public book(String name){
this.name = name ;
} public String getName() {
return name;
}
}
创建放书的容器书柜BookShelf
/**
* @Acthor:
* @ClassName:BookShelf
* @Description:书柜是放书的容器
*/
public class BookShelf implements Aggregate{
private book[] books ;
private int last = 0 ;
public BookShelf(int maxSize){
this.books = new book[maxSize];
} public book getBookAt(int index) {
return books[index];
}
public void appendBook(book books){
this.books[last] = books ;
last++ ;
}
public int getLength(){
return last ;
}
@Override
public Iterator iterator() {
return new BookShelfIterator(this);
}
}
遍历书柜(容器)中的书
/**
* @Acthor:
* @ClassName:
* @Description:遍历书柜容器的书
*/
public class BookShelfIterator implements Iterator {
private BookShelf bookShelf ;
private int index ;
public BookShelfIterator(BookShelf bookShelf){
this.bookShelf = bookShelf ;
this.index = 0 ;
}
@Override
public boolean hasNext() {
if(index <bookShelf.getLength()){
return true ;
}else {
return false;
}
} @Override
public Object next() {
book b = bookShelf.getBookAt(index);
index++ ;
return b;
}
}
测试代码
import java.awt.print.Book; /**
* @Acthor:
* @ClassName:
* @Description:
*/
public class MainDemo {
public static void main(String[] args){
BookShelf bookShelf =new BookShelf(4);
bookShelf.appendBook(new book("A"));
bookShelf.appendBook(new book("C"));
bookShelf.appendBook(new book("B"));
Iterator iterator = bookShelf.iterator() ;
while(iterator.hasNext()){
book b = (book) iterator.next();
System.out.print(b.getName());
}
}
}
以上就是迭代模式的一个小程序,可以看出要想使用迭代模式开发程序首先需要一个Iterator接口(迭代器),接口中定义你所需要的方法。然后定一个Aggregate接口是生成一个迭代器,该接口是实现
BookShelfIterator 书柜(容器)的遍历。再定义一个你所需要遍历的对象book类和需要存储book对象的BookShref书柜(容器)。
Java Iterator模式的更多相关文章
- Java 实现迭代器(Iterator)模式
类图 /** * 自己定义集合接口, 相似java.util.Collection * 用于数据存储 * @author stone * */ public interface ICollection ...
- Java设计模式(12)迭代模式(Iterator模式)
上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟, ...
- Java设计模式之Iterator模式
分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例 ...
- <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合
一.前言 几个月前的看书笔记 ...
- 《java与模式》
2012年3月 随笔档案 - java_my_life - 博客园--此网友 12年的博客都是和模式有关的,希望可以多看看.http://www.cnblogs.com/java-my-life/ar ...
- 设计模式《JAVA与模式》之迭代子模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不 ...
- Java - Iterator源码解析
java提高篇(三十)-----Iterator 迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式.Iterator模式是用于遍历集合类的标准 ...
- 设计模式—迭代器Iterator模式
什么是迭代器模式? 让用户通过特定的接口访问容器的数据,不需要了解容器内部的数据结构. 首先我们先模仿集合中ArrayList和LinkedList的实现.一个是基于数组的实现.一个是基于链表的实现, ...
- [转]JAVA Iterator 的用法
java.util包中包含了一系列重要的集合类.本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕. 下面我们先简单讨论一个根接口Collection,然后分析一 ...
随机推荐
- 【转】5G标准——独立组网(SA)和非独立组网(NSA)
独立组网模式(SA):指的是新建5G网络,包括新基站.回程链路以及核心网.SA引入了全新网元与接口的同时,还将大规模采用网络虚拟化.软件定义网络等新技术,并与5GNR结合,同时其协议开发.网络规划部署 ...
- php断点续传之文件上传与文件下载
下载: 原理: Http头的 Range.Content-Range()未启用单点登录GerenalRequest URL: http://www.demotest.com/php/fileDownl ...
- JConsole&VisualVM监控总结
简介JConsole(以下写作jconsole),VisualVM(以下写作jvisualvm ) 都是比较好的JVM调优工具,且都为JDK自带,可在命令行直接启动. 监控示例Server端(需要监控 ...
- python中遇到的问题:IndentationError: unexpected indent
在Python中写下列代码的时候,出现错误:IndentationError: unexpected indent 分析:IndentationError是缩进的错误,查看源代码发现names开始的这 ...
- JAVA 垃圾回收读书笔记
对象已死 在JAVA代码运行中,会不停的创建对象,因为内存空间不是无限的,Java虚拟机必须不停的回收无用的数据空间.那么虚拟机是怎么判断对象空间是需要被回收的呢,也就是怎么样的数据算是垃圾数据呢? ...
- 线性回归和梯度下降代码demo
程序所用文件:https://files.cnblogs.com/files/henuliulei/%E5%9B%9E%E5%BD%92%E5%88%86%E7%B1%BB%E6%95%B0%E6%8 ...
- 聊聊MVC和模块化以及MVVM和组件化
原文链接 小寒的博客,带你理解更深的世界 面向对象,模块化和MVC 面向对象是指把写程序映射到现实生活,从而一来逻辑性更强,更容易写好代码,二来代码很贴切,通俗易懂,更被人理解,三来更加容易拓展和管理 ...
- 洛谷P4550 【收集邮票】
题目链接: 神仙题QAQ 题目分析: 概率期望题是不可能会的,一辈子都不可能会的QAQ 这个题也太仙了 首先明确一下题意里面我感觉没太说清楚的地方,这里是抽到第\(i\)次要\(i\)元钱,不是抽到第 ...
- 34 N皇后问题Ⅱ
原题网址:https://www.lintcode.com/zh-cn/old/problem/n-queens-ii/ 34. N皇后问题 II 描述 笔记 数据 评测 讨论区 根据n皇后问题, ...
- C++ 函数模板&类模板详解
在 C++ 中,模板分为函数模板和类模板两种.函数模板是用于生成函数的,类模板则是用于生成类的. 函数模板&模板函数 类模板&模板类 必须区分概念 函数模板是模板,模板函数时 ...