Java迭代模式(Iterator模式)

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

好了,那么我们现在来看老师这个点名过程是如何实现吧:

1、老规矩,我们先定义老师(Teacher)接口类:

public interface Teacher {

public Iterator createIterator(); //点名

}

2、具体的老师(ConcreteTeacher)类是对老师(Teacher)接口的实现:

public class ConcreteTeacher implements Teacher{

private Object[] present = {"张三来了","李四来了","王五没来"}; //同学出勤集合

public Iterator createIterator(){

return new ConcreteIterator(this); //新的点名

}

public Object getElement(int index){ //得到当前同学的出勤情况

if(index<present.length){

return present[index];

}

else{

return null;

}

}

public int getSize(){

return present.length; //得到同学出勤集合的大小,也就是说要知道班上有多少人

}

}

3、定义点名(Iterator)接口类:

public interface Iterator {

void first(); //第一个

void next(); //下一个

boolean isDone(); //是否点名完毕

Object currentItem(); //当前同学的出勤情况

}

4、具体的点名(ConcreteIterator)类是对点名(Iterator)接口的实现:

public class ConcreteIterator implements Iterator{

private ConcreteTeacher teacher;

private int index = 0;

private int size = 0;

public ConcreteIterator(ConcreteTeacher teacher){

this.teacher = teacher;

size = teacher.getSize(); //得到同学的数目

index = 0;

}

public void first(){ //第一个

index = 0;

}

public void next(){ //下一个

if(index<size){

index++;

}

}

public boolean isDone(){ //是否点名完毕

return (index>=size);

}

public Object currentItem(){ //当前同学的出勤情况

return teacher.getElement(index);

}

}

5、编写测试类:

public class Test {

private Iterator it;

private Teacher teacher = new ConcreteTeacher();

public void operation(){

it = teacher.createIterator(); //老师开始点名

while(!it.isDone()){ //如果没点完

System.out.println(it.currentItem().toString()); //获得被点到同学的情况

it.next(); //点下一个

}

}

public static void main(String agrs[]){

Test test = new Test();

test.operation();

}

}

6、说明:

A:定义:Iterator模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部情况。

B:在本例中,老师(Teacher)给出了创建点名(Iterator)对象的接口,点名(Iterator)定义了遍历同学出勤情况所需的接口。

C:Iterator模式的优点是当(ConcreteTeacher)对象中有变化是,比如说同学出勤集合中有加入了新的同学,或减少同学时,这种改动对客户端是没有影响的。

迭代器模式

 概述
    给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
 适用性
    1.访问一个聚合对象的内容而无需暴露它的内部表示。

    2.支持对聚合对象的多种遍历。

    3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。
			
 参与者
    1.Iterator
      迭代器定义访问和遍历元素的接口。

    2.ConcreteIterator
      具体迭代器实现迭代器接口。
      对该聚合遍历时跟踪当前位置。

    3.Aggregate
      聚合定义创建相应迭代器对象的接口。

    4.ConcreteAggregate
      具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例.
 类图

 例子

Iterator

public interface Iterator {

    Object next();

    void first();

    void last();

    boolean hasNext();
}

ConcreteIterator

public class IteratorImpl implements Iterator {

    private List list;

    private int index;

    public IteratorImpl(List list) {
        index = 0;
        this.list = list;
    }

    public void first() {
        index = 0;
    }

    public void last() {
        index = list.getSize();
    }

    public Object next() {
        Object obj = list.get(index);
        index++;
        return obj;
    }

    public boolean hasNext() {
        return index < list.getSize();
    }
}

Aggregate

public interface List {

    Iterator iterator();

    Object get(int index);

    int getSize();

    void add(Object obj);
}

ConcreteAggregate

public class ListImpl implements List {

    private Object[] list;

    private int index;

    private int size;

    public ListImpl() {
        index = 0;
        size = 0;
        list = new Object[100];
    }

    public Iterator iterator() {
        return new IteratorImpl(this);
    }

    public Object get(int index) {
        return list[index];
    }

    public int getSize() {
        return this.size;
    }

    public void add(Object obj) {
        list[index++] = obj;
        size++;
    }
}

Test

public class Test {

    public static void main(String[] args) {
        List list = new ListImpl();
        list.add("a");
        list.add("b");
        list.add("c");
        //第一种迭代方式
        Iterator it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }

        System.out.println("=====");
        //第二种迭代方式
        for (int i = 0; i < list.getSize(); i++) {
            System.out.println(list.get(i));
        }
    }
}

result

a
b
c
=====
a
b
c

时间: 2024-10-13 11:46:53

Java迭代模式(Iterator模式)的相关文章

Java设计模式之Iterator模式

分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例,模拟Iterator的原理.参考:马士兵 Java设计模式 Iterator1.首先定义一个容器Collection接口. [java] view plaincopy package com.njupt.zhb.learn.iterator; public interface Collection

Java 实现迭代器(Iterator)模式

类图 /** * 自定义集合接口, 类似java.util.Collection * 用于数据存储 * @author stone * */ public interface ICollection<T> { IIterator<T> iterator(); //返回迭代器 void add(T t); T get(int index); } /** * 自定义迭代器接口 类似于java.util.Iterator * 用于遍历集合类ICollection的数据 * @author

Iterator模式详解--设计模式(21)

Iterator模式来源: 迭代器(Iterator)模式,又叫做游标(Cursor)模式.GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节.从定义可见,迭代器模式是为容器而生. Iterator模式作用: (1).它支持以不同的方式遍历一个聚合复杂的聚合可用多种方式进行遍历,如二叉树的遍历,可以采用前序.中序或后序遍历.迭代器模式使得改变遍历算法变得很容易: 仅需用一个不同的迭代器的实例代替原先的实例即可,你也可以自己定义迭代器的子

设计模式之Iterator模式

STL里的iterator就是应用了iterator模式. 一.什么是迭代模式 Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator按顺序进行遍历访问的设计模式. 二.不使用迭代模式的应用 在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题.或者说,如果不使用Iterator模式,会存在什么问题. 由容器自己实现顺序遍历.直接在容器类里直接添加顺序遍历方法 让调用者自己实现遍历.直接暴露数据细节给外部.

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

迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(iterator pattern): http://blog.csdn.net/caroline_wendy/article/details/35254643 Java的标准库(util)中包括迭代器接口(iterator interface), import java.util.Iterator; 继承

Java源码分析:深入探讨Iterator模式

作者:兄弟连 java.util包中包含了一系列重要的集合类.本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕. 下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理. 本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很多泛型代码,为了简化问题,所以我们还是讨论1.4版本的代码. 集合类的根接口Collection

设计模式学习笔记--迭代(Iterator)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

java设计模式--行为型模式--迭代模式

1 迭代器模式 2 概述 3 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 4 5 6 适用性 7 1.访问一个聚合对象的内容而无需暴露它的内部表示. 8 9 2.支持对聚合对象的多种遍历. 10 11 3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代). 12 13 14 参与者 15 1.Iterator 16 迭代器定义访问和遍历元素的接口. 17 18 2.ConcreteIterator 19 具体迭代器实现迭代器接口.

19迭代模式Iterator

一.什么是迭代模式 Iterator模式也叫迭代模式,是行为模式之 一,它把对容器中包含的内部对象的访问委让给 外部类,使用Iterator(遍历)按顺序进行遍历 访问的设计模式. 二.不使用迭代模式的应用 在应用Iterator模式之前,首先应该明白Iterator 模式用来解决什么问题.或者说,如果不使用 Iterator模式,会存在什么问题. 1.由容器自己实现顺序遍历.直接在容器类里直接添加顺序遍历方法 2.让调用者自己实现遍历.直接暴露数据细节给外部. 三.不使用迭代模式的缺点 以上方