一、什么是迭代模式

  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. [Go] 开发 go web 项目,踩到的一些“坑”

    注意:这些“坑”不是bug,只是自己当时没搞明白. 用到的框架为 Beego 1.字典 map 是“引用类型”,本身就是指针,作为参数传递时,直接传 map 变量名即可(不要传 map 变量指针). ...

  2. WinForm EF+MySql企业管理软件C/S项目实战演练

    一.课程介绍 我们都知道在软件架构方式分为:C/S和B/S两类.这里阿笨不谈论两种软件架构的优劣之分,因为它们各有千秋,用于不同场合.一位伟大的讲师曾经说过一句话:事物存在即合理!录制这堂课程的目的就 ...

  3. C#模拟HTTP请求Post JSON

    前言 因为接口是http的,我们站点是https的,不能https直接ajax请求http,所以需要在SharePoint中开发一个模拟请求Ajax的Service,分享一下. var httpWeb ...

  4. 奇怪吸引子---Lorenz

    奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...

  5. Android 实战之酷云(一)

    前言 大家好啊!好久没有见到我了吧.为什么呢!当然是由于开学啦,这学期非常多课,身为部长实验室也也非常多活动和一堆小师弟.同一时候还有蓝桥杯和华为软件开发大赛.并且近期在做一个综合性比較高的作品,没错 ...

  6. eclipse maven 导出项目依赖的jar包

    转自:https://blog.csdn.net/andyliulin/article/details/46544555 一.导出到默认目录 targed/dependency 从Maven项目中导出 ...

  7. windows server 2012 浏览器IE10无法下载。

    cannot download in IE 10 of window server 2012 中文版解决办法: 1.打开IE,按F12,选择兼容浏览器为IE 9 2.选择IE的Internet选项菜单 ...

  8. 设置nginx和php-fpm更改上传文件大小限制

    Nginx和php默认不支持上传过大的文件.假如我们要求上传的文件大小为20M,默认配置就不允许上传了. 下面我们更改nginx和php配置,设定上传的限制为20M. Nginx配置更改 如果上传文件 ...

  9. 关于FMDatabase executeQuery的问题

    如果你碰到这个问题,请查看idx的值,并查看SQL语句中第6个字段的值有问题(从0开始),比如你给的值是NSInteger会报错,需要将其转成NSString.

  10. 深入理解Fsync

    1 介绍 数据库系统从诞生那天开始,就面对一个很棘手的问题,fsync的性能问题.组提交(group commit)就是为了解决fsync的问题.最近,遇到一个业务反映MySQL创建分区表很慢,仔细分 ...