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,然后分析一 ...
随机推荐
- Java 12 正式发布,8大新特性!
自 2 月 7 日开始,Java/JDK 12 就进入了 RC 阶段.按照发布周期,美国当地时间 3 月 19 日,也就是北京时间 20 号 Java 12 正式发布了! △ JDK 12 GA 发布 ...
- 使用 /proc 文件系统
/proc 文件系统是一个特殊的软件创建的文件系统, 内核用来输出消息到外界. /proc 下 的每个文件都绑到一个内核函数上, 当文件被读的时候即时产生文件内容. 我们已经见到 一些这样的文件起作用 ...
- memcache 使用手册
Memcached 教程 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fit ...
- 人脸识别的LOSS(上)
超多分类的Softmax 2014年CVPR两篇超多分类的人脸识别论文:DeepFace和DeepID Taigman Y, Yang M, Ranzato M A, et al. Deepface: ...
- windows10 vs2019 + opencv 3.4.7环境搭建
windows vs2019 + opencv 3.4.7环境搭建 安装Opencv 3.4.7 下载 Opencv 第1步 进入 opencv releases 页面,点击 "Window ...
- [记]Cordova安装插件选择插件版本
在项目中可以使用 cordova plugin add [PLUGIN_ID] 這个命令安装一个cordova插件,这个命令好像是安装插件的最新版本.当需要通过cordova下载这个插件一个特定的版本 ...
- Java中Arrys数组常用的方法
Arrys常用方法 1.toString() Arrays.toString(arr) //打印数组的内容,观察数组元素的值 2.sort() Arrays.sort(arr); ...
- leetcode 132 Palindrome Pairs 2
lc132 Palindrome Pairs 2 大致与lc131相同,这里要求的是最小分割方案 同样可以分割成子问题 dp[i][j]还是表示s(i~j)是否为palindrome res[i]则用 ...
- leetcode-123-买卖股票的最佳时机③
题目描述: 方法一: class Solution: def maxProfit(self, prices: List[int]) -> int: dp_i1_0 = 0 dp_i1_1 = f ...
- 【JZOJ1259】牛棚安排
description Farmer John的N(1<=N<=1000)头奶牛分别居住在农场所拥有的B(1<=B<=20)个牛棚的某一个里.有些奶牛很喜欢她们当前住的牛棚,而 ...