一、什么是迭代模式

  Iterator模式也叫迭代模式,是行为模式之 一,它把对容器中包含的内部对象的访问委让给 外部类,使用Iterator(遍历)按顺序进行遍历 访问的设计模式。

二、不使用迭代模式的应用

  在应用Iterator模式之前,首先应该明白Iterator 模式用来解决什么问题。或者说,如果不使用 Iterator模式,会存在什么问题。

    1.由容器自己实现顺序遍历。直接在容器类里直接添加顺序遍历方法

    2.让调用者自己实现遍历。直接暴露数据细节给外部。

三、不使用迭代模式的缺点

  以上方法1与方法2都可以实现对遍历,这样有问、 题呢?

    1,容器类承担了太多功能:一方面需要提供添加删除等本身应有的功能;一方面还需要提供遍历访问功能。

    2,往往容器在实现遍历的过程中,需要保存遍历状态,当跟元素的添加删除等功能夹杂在一起,很容易引起混乱和程序运行错误等。

四、使用迭代模式的应用

  Iterator模式就是为了有效地处理按顺序进行遍历访问 的一种设计模式,简单地说,Iterator模式提供一种有效 的方法,可以屏蔽聚集对象集合的容器类的实现细节, 而能对容器内包含的对象元素按顺序进行有效的遍历访 问。

  所以,Iterator模式的应用场景可以归纳为满足以下几个 条件:

    - 访问容器中包含的内部对象

    - 按顺序访问

五、迭代模式的结构

五、迭代模式的角色和职责

  Iterator(迭代器接口): 该接口必须定义实现迭代功能的最小定义方法集 比如提供hasNext()和next()方法。

  ConcreteIterator(迭代器实现类): 迭代器接口Iterator的实现类。可以根据具体情况加以实现。

  Aggregate(容器接口): 定义基本功能以及提供类似Iterator iterator()的方法。

  concreteAggregate(容器实现类): 容器接口的实现类。必须实现Iterator iterator()方法。

六、迭代模式的优点

  1,实现功能分离,简化容器接口。让容器只实现本身的基本功能,把迭代功能委让给外部类实现,符合类的设计原则。

  2,隐藏容器的实现细节。

  3,为容器或其子容器提供了一个统一接口,一方面方便调用;另一方面使得调用者不必关注迭代器的实现细节。

  4,可以为容器或其子容器实现不同的迭代方法或多个迭代方法。

书

 public class Book {
private String ISBN;
private String name;
private double price; public Book(String isbn, String name, double price) {
ISBN = isbn;
this.name = name;
this.price = price;
} public String getISBN() {
return ISBN;
} public void setISBN(String isbn) {
ISBN = isbn;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public void display() {
System.out.println("ISBN=" + ISBN + ",name=" + name + ",price" + price);
}
}

图书列表

 import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class BookList {
private List<Book> bookList;
private int index;
private Iterator iterator; public BookList() {
bookList = new ArrayList<Book>();
} //添加书籍
public void addBook(Book book) {
bookList.add(book);
} //删除书籍
public void deleteBook(Book book) {
int bookIndex = bookList.indexOf(book);
bookList.remove(bookIndex);
} // //判断是否有下一本书
// public boolean hasNext() {
// if(index >= bookList.size()) {
// return false;
// }
// return true;
// }
//
// //获得下一本书
// public Book getNext() {
// return bookList.get(index++);
// } // public List<Book> getBookList() {
// return bookList;
// } public Iterator Iterator() {
return new Itr();
}
//迭代
private class Itr implements Iterator{ public boolean hasNext() {
if(index >= bookList.size()) {
return false;
}
return true;
} public Object next() {
return bookList.get(index++);
} public void remove() { }
}
}

测试

 import java.util.Iterator;

 public class MainClss {
public static void main(String[] args) {
BookList bookList = new BookList(); Book book1 = new Book("010203","Java编程思想",90);
Book book2 = new Book("010204","Java从入门到精通",60); bookList.addBook(book1);
bookList.addBook(book2); // while(bookList.hasNext()) {
// Book book = bookList.getNext();
// book.display();
// } // List<Book> bookDateList = bookList.getBookList();
// for(int i = 0; i < bookDateList.size(); i++) {
// Book book = bookDateList.get(i);
// book.display();
// } Iterator iter = bookList.Iterator();
while(iter.hasNext()) {
Book book = (Book) iter.next();
book.display();
}
}
}

19迭代模式Iterator的更多相关文章

  1. 设计模式 - 迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释

    迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(ite ...

  2. 【设计模式】—— 迭代模式Iterator

    前言:[模式总览]——————————by xingoo 模式意图 提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示. 应用场景 1 访问一个聚合的对象,而不需要暴露对象的内部表 ...

  3. Java设计模式(12)迭代模式(Iterator模式)

    上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟, ...

  4. 设计模式16:迭代模式(Iterator)

    迭代模式: 它提供了一种方法没有对象的顺序访问聚合对象的暴漏底层的细节. Provide a way to access the elements of an aggregate object seq ...

  5. java设计模式-----19、迭代模式

    概念: Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式. 迭代模式使用比较少,JDK集合也提供 ...

  6. 迭代子(Iterator)模式

    迭代子模式又叫做游标模式.迭代子模式可以顺序地访问一个聚集中的元素而必暴露聚集的内部表象. 1.  聚集和Java聚集 多个对象在一起形成的总体形成聚集(Aggregate),聚集对象是能够包容一组对 ...

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

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

  8. [工作中的设计模式]迭代子模式Iterator

    一.模式解析 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象 1.迭代子模式一般用于对集合框架的访问,常用的集合框架为lis ...

  9. Java设计模式(二)——迭代模式

    迭代模式的基本定义:对于一组对象集合(数组.堆栈.列表或散列),用户无需关心它的底层实现而能够通过调用统一接口遍历当中的所有元素.由于jdk已经对常见的迭代模式实现了封装,本文直接提供Collecti ...

随机推荐

  1. 【转载】实用VC++6.0插件

    [转自]http://www.cnblogs.com/witxjp/archive/2011/04/03/2004556.html Visual Assist(强烈推荐)网址:http://www.w ...

  2. 前端性能优化 —— 减少HTTP请求

    简要:对于影响页面呈选 的因素有3个地方:服务器连接数据库并计算返回数据 , http请求以及数据(文件)经过网络传输 , 文件在浏览器中计算渲染呈选: 其中大约80%的时间都耗在了http请求上,所 ...

  3. oracle多个结果集拼接字符串;where id in 字符串 (转)

    转自:http://blog.sina.com.cn/s/blog_af26e333010194ht.html 最近修改oracle触发器,在过程中遇到两个问题: select lastname fr ...

  4. 常见爬虫/BOT 对抗技术简介(二)

    上一篇文章分别从网络协议,Robots文件,JS渲染,行为分析等多方面讲了些“反爬虫”,“反-反爬虫”技术. 点击查看:<常见爬虫/BOT 对抗技术简介(一)> 本文将主要介绍各种IP地址 ...

  5. POJ2456 Aggressive cows 二分

    Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...

  6. RxJava2 源码解析(一)

    概述 最近事情太多了,现在公司内部的变动,自己岗位的变化,以及最近决定找工作.所以博客耽误了,准备面试中,打算看一看RxJava2的源码,遂有了这篇文章. 不会对RxJava2的源码逐字逐句的阅读,只 ...

  7. 如何用C#动态编译、执行代码

    在开始之前,先熟悉几个类及部分属性.方法:CSharpCodeProvider.ICodeCompiler.CompilerParameters.CompilerResults.Assembly. 一 ...

  8. inet_ntoa内存问题

    最近写的一个程序,大致用到以下代码: WSADATA wsaData; WSAStartup (MAKEWORD( 2, 2 ),&wsaData); struct addrinfo *aiL ...

  9. Android典型界面设计(8) ——ViewPager+PagerSlidingTabStrip实现双导航

    一.问题描述 PagerSlidingTabStrip是android开源项目,指示器控件.官网地址:https://github.com/astuetz/PagerSlidingTabStrip 该 ...

  10. iSpy免费的开源视频监控平台

    iSpy包括英文,Deutsch,Español,Française,Italiano和中文的翻译 iSpy是我们免费的开源视频监控平台.iSpy作为安装的Windows应用程序运行,具有完整的本地用 ...