设计模式之Iterator - 迭代模式.docx

上传人:汽*** 文档编号:548913545 上传时间:2024-02-20 格式:DOCX 页数:6 大小:40.43KB
返回 下载 相关 举报
设计模式之Iterator - 迭代模式.docx_第1页
第1页 / 共6页
设计模式之Iterator - 迭代模式.docx_第2页
第2页 / 共6页
设计模式之Iterator - 迭代模式.docx_第3页
第3页 / 共6页
设计模式之Iterator - 迭代模式.docx_第4页
第4页 / 共6页
设计模式之Iterator - 迭代模式.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《设计模式之Iterator - 迭代模式.docx》由会员分享,可在线阅读,更多相关《设计模式之Iterator - 迭代模式.docx(6页珍藏版)》请在金锄头文库上搜索。

1、设计模式之Iterator - 迭代模式 2009-02-14 09:52Iterator模式也叫迭代模式,是由GoF提出的23种设计模式的一种。Iterator模式是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。 本文介绍设计模式中的迭代(Iterator)模式的概念,用法,以及实际应用中怎么样使用迭代模式进行开发。Iterator模式的概念Iterator模式指对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。在程序设计中,经常有这种情况,需要从大量得数据(对象)集合中

2、一个个地取出数据加以处理。Iterator模式就是为了有效地处理按顺序进行遍历访问的一种设计模式,简单地说,Iterator模式提供一种有效的方法,可以屏蔽聚集对象集合的容器类的实现细节,而能对容器内包含的对象元素按顺序进行有效的遍历访问。所以,Iterator模式的应用场景可以归纳为满足以下几个条件:- 访问容器中包含的内部对象- 按顺序访问为什么需要Iterator模式在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题。或者说,如果不使用Iterator模式,会存在什么问题。我们举例来说明Iterator模式到底好在哪。比如有一个Book类,一个管理Book的

3、容器类BookList:view plaincopy to clipboardprint?1. public class Book 2. . 3. 4. 5. public class BookList 6. /保存Book对象数据 7. private List bookList = new ArrayList(); 8. 9. /添加Book对象至BookList容器 10. public void addBook(Book book) 11. . 12. 13. 14. /从BookList容器删除Book对象 15. public void deleteBook(Book book)

4、16. . 17. 18. 19. /其他方法 20. . 21. public class Book .public class BookList /保存Book对象数据 private List bookList = new ArrayList(); /添加Book对象至BookList容器 public void addBook(Book book) . /从BookList容器删除Book对象 public void deleteBook(Book book) . /其他方法 .我们需要按顺序遍历访问BookList包含的Book对象。怎么实现顺序遍历方法呢?你可能会考虑以下这些遍历方

5、法:方法1,由容器自己实现顺序遍历。直接在BookList里直接添加顺序遍历方法:view plaincopy to clipboardprint?1. public class BookList 2. private int index; 3. . 4. /得到当前Book 5. public Book getCurrentBook() 6. . 7. Book book = (Book)bookList.get(index); 8. . 9. return book; 10. 11. 12. /是否存在下一个Book 13. public boolean hasNext() 14. . 1

6、5. 16. public class BookList private int index; . /得到当前Book public Book getCurrentBook() . Book book = (Book)bookList.get(index); . return book; /是否存在下一个Book public boolean hasNext() . 使用时,可能的使用方法是:view plaincopy to clipboardprint?1. BookList bookList = .; 2. . 3. while (bookList.hasNext() 4. Book b

7、ook = bookList.getCurrentBook(); 5. /对Book加以处理(略) 6. . 7. BookList bookList = .;.while (bookList.hasNext() Book book = bookList.getCurrentBook(); /对Book加以处理(略) .方法2,让调用者自己实现遍历。直接暴露BookList数据细节给外部,比如:view plaincopy to clipboardprint?1. public class BookList 2. . 3. public Book getBookList() 4. . 5. r

8、eturn bookList; 6. 7. public class BookList . public Book getBookList() . return bookList; 可能的使用方法为:view plaincopy to clipboardprint?1. BookList bookList = .; 2. List bookDataList = bookList.getBookList(); 3. . 4. for (int i=0; bookDataList != null & ibookDataList.size(); i+) 5. Book book = bookData

9、List.get(i); 6. /对Book加以处理(略) 7. . 8. BookList bookList = .;List bookDataList = bookList.getBookList();.for (int i=0; bookDataList != null & ibookDataList.size(); i+) Book book = bookDataList.get(i); /对Book加以处理(略) .以上方法1与方法2都可以实现对BookList所包含的Book对象进行遍历,这样有问题呢?确实使用上没有任何问题。但实现方法1中,1,容器类BookList承担了太多功能

10、:一方面需要提供添加删除等BookList本身应有的功能;一方面还需要提供遍历访问功能。2,往往容器在实现遍历的过程中,需要保存遍历状态,当跟元素的添加删除等功能夹杂在一起,很容易引起混乱和程序运行错误等。在实现方法2中,容器本身未实现任何遍历方法,把这个遍历的任务交给了调用者,这样一来,暴露了容器本身的实现细节,如果一旦容器内部的数据接口发生变化,比如由于某种原因,BookList的List bookList用Map bookList来实现,这样,所有调用方的程序不得不随着BookList的修改而修改。Iterator模式很好地解决了以上问题。我们先从JDK中的Collection Fram

11、ework对Iterator模式的实现方法来说明Iterator模式。Java Collections Framework - Java集合框架List,Map,Set等全面介绍之概要篇Java Collection Framework对迭代模式的经典实现1,迭代接口:Iterator接口,定义了遍历接口:view plaincopy to clipboardprint?1. public interface Iterator 2. 3. /判断是否存在下一个元素 4. public abstract boolean hasNext(); 5. /返回下一个可用的元素 6. public ab

12、stract Object next(); 7. /移除当前元素 8. public abstract void remove(); 9. public interface Iterator /判断是否存在下一个元素 public abstract boolean hasNext(); /返回下一个可用的元素 public abstract Object next(); /移除当前元素 public abstract void remove();2,容器接口:Collection接口,定义了iterator()方法,把遍历委让给Iterator的实现类。view plaincopy to clipboardprint?1. public interface Collection 2. extends Iterable 3. 4. . 5. /取得对所有元素的遍历。可以通过Iterator提供的方法遍历集合的元素 6. public abstract It

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号