设计模式——16迭代子模式(Iterator)

16、迭代子模式(Iterator)
顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。

这个思路和我们常用的一模一样,MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且持有Collection实例,我们来看看实现代码:
两个接口:
[java] view plaincopy

  1. public interface Collection {
  2. public Iterator iterator();
  3. /取得集合元素/
  4. public Object get(int i);
  5. /取得集合大小/
  6. public int size();
  7. }
    [java] view plaincopy
  8. public interface Iterator {
  9. //前移
  10. public Object previous();
  11. //后移
  12. public Object next();
  13. public boolean hasNext();
  14. //取得第一个元素
  15. public Object first();
  16. }
    两个实现:

[java] view plaincopy

  1. public class MyCollection implements Collection {
  2. public String string[] = {"A","B","C","D","E"};
  3. @Override
  4. public Iterator iterator() {
  5. return new MyIterator(this);
  6. }
  7. @Override
  8. public Object get(int i) {
  9. return string[i];
  10. }
  11. @Override
  12. public int size() {
  13. return string.length;
  14. }
  15. }
    [java] view plaincopy
  16. public class MyIterator implements Iterator {
  17. private Collection collection;
  18. private int pos = -1;
  19. public MyIterator(Collection collection){
  20. this.collection = collection;
  21. }
  22. @Override
  23. public Object previous() {
  24. if(pos > 0){
  25. pos--;
  26. }
  27. return collection.get(pos);
  28. }
  29. @Override
  30. public Object next() {
  31. if(pos
  32. pos++;
  33. }
  34. return collection.get(pos);
  35. }
  36. @Override
  37. public boolean hasNext() {
  38. if(pos
  39. return true;
  40. }else{
  41. return false;
  42. }
  43. }
  44. @Override
  45. public Object first() {
  46. pos = 0;
  47. return collection.get(pos);
  48. }
  49. }
    测试类:

[java] view plaincopy

  1. public class Test {
  2. public static void main(String[] args) {
  3. Collection collection = new MyCollection();
  4. Iterator it = collection.iterator();
  5. while(it.hasNext()){
  6. System.out.println(it.next());
  7. }
  8. }
  9. }
    输出:A B C D E

此处我们貌似模拟了一个集合类的过程,感觉是不是很爽?其实JDK中各个类也都是这些基本的东西,加一些设计模式,再加一些优化放到一起的,只要我们把这些东西学会了,掌握好了,我们也可以写出自己的集合类,甚至框架!

时间: 2024-10-09 14:43:59

设计模式——16迭代子模式(Iterator)的相关文章

Java设计模式(十六)----迭代子模式

迭代子模式 一. 概述 二. 结构 1.白箱聚集与外禀迭代子 2.黑箱聚集与内禀迭代子 主动迭代子和被动迭代子 静态迭代子和动态迭代子 Fail Fast Fail Fast在JAVA聚集中的使用 迭代子模式的优点 一.概述 1.定义 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation). 2.聚集和Java聚集 多个对象聚在一起形成的总体称之为聚集(Aggregate),聚集

java迭代子模式详解_java

迭代子(Iterator)模式的结构: 迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象. 迭代子可分为外禀迭代子和内禀迭代子.外禀迭代子:适合于白箱聚集(白箱聚集就是向外界提供访问自己内部元素接口的聚集),由于迭代的逻辑是由聚集对象本身提供的,所以这样的外禀迭代子角色往往仅仅保持迭代的游标位置.所以具体迭代子角色是一个外部类,它的构造函数接受一个具体聚集对象,从而可以调用这个聚集对象的迭代逻辑.内禀迭代子:适用于黑箱聚集(黑箱聚集不向外部提供遍历自己元素对象的接口),由于黑箱聚集

.NET设计模式-迭代器模式(Iterator Pattern)

概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据.面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责.Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据. 意图 提供一种方法顺序访问一个聚合对象中

Java设计模式之迭代模式(Iterator模式)介绍_java

上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:"误人子弟,乃是犯罪!"啊. 好了,那么我们现在来看老师这个点名过程是如何实现吧:1.老规矩,我们先定义老师(Teacher)接口类: 复制代码 代码如下: public interface Teacher {     public Iterator createIterator(); //点名 }

设计模式学习笔记(十三)—Iterator迭代器模式

Iterator模式定义: 提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示. 这个模式在java的类库中已经实现了,在java中所有的集合类都实现了Conllection接口,而Conllection接口又继承了Iterable接口,该接口有一个iterator方法,也就是所以的集合类都可以通过这个iterator方法来转换成Iterator类,用Iterator对象中的hasnext方法来判断是否还有下个元素,next方法来顺序获取集合类中的对象.今天面试考到设计模式,

设计模式[16]-Facede

Type: Structural Facade: 为子系统中的一组接口提供一个一致的界面.典型应用是数据库JDBC的应用. Jsp中常用的操作数据库的方法如下: public class DBCompare { Connection conn = null; PreparedStatement prep = null; ResultSet rset = null; try { Class.forName( "<driver>" ).newInstance(); conn =

020_《Delphi深度探索(第二版)》

<Delphi深度探索(第二版)> Delphi 教程 系列书籍 (020) <Delphi深度探索(第二版)> 网友(邦)整理 EMail: shuaihj@163.com 下载地址:    Part1 Part2 Part3 Part4 Part5 Part6 Part7 附书源码           作者: 陈省 出版社:电子工业出版社 ISBN:7505394118 上架时间:2004-2-14 出版日期:2004 年1月 开本:16开 页码:540 版次:2-1 内容简介

设计模式之iterator模式到STL中iterator迭代器

设计模式之iterator模式到STL中iterator迭代器 近日看<设计模式:可复用面向对象软件的基础>一书中23种模式中就有iterator迭代模式,且篇幅颇大.机缘巧合.我在分析STL代码结构的时候,同样发现iterator迭代器,且占据相当大的地位. 从设计模式的角度来看iterator模式 ü     意图 提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露对象的内部表示.我想GOF 的意图这次说的很明白了,就是我想遍历一个聚合对象.但又隐藏内部实现.该怎么办呢?本模式主要

Java集合Iterator迭代的实现方法_java

我们常常使用 JDK 提供的迭代接口进行 Java 集合的迭代. Iterator iterator = list.iterator(); while(iterator.hasNext()){ String string = iterator.next(); //do something } 迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式.Iterator 模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来