您的位置:首页 > 其它

设计模式-行为型-迭代器模式(Iterator)

2012-12-24 11:10 381 查看
概述

给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.

适用性

1.访问一个聚合对象的内容而无需暴露它的内部表示.

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

3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代).

参与者

1.Iterator

迭代器定义访问和遍历元素的接口.

2.ConcreteIterator

具体迭代器实现迭代器接口.

对该聚合遍历时跟踪当前位置.

3.Aggregate

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

4.ConcreteAggregate

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

类图





示例代码:

package com.sql9.actioned;

import java.util.ArrayList;

import java.util.List;

/**

* 迭代器模式 实现示例

* @author sean

*/

interface IIterator<T> {

T next();

void first();

void last();

boolean hasNext();

}

class IIteratorImpl<T> implements IIterator<T> {

private IList<T> list;

private int index;

public IIteratorImpl (IList<T> list) {

index = 0;

this.list = list;

}

@Override

public T next() {

T t = list.get(index);

index++;

return t;

}

@Override

public void first() {

index = 0;

}

@Override

public void last() {

index = list.size();

}

@Override

public boolean hasNext() {

return index < list.size();

}

}

interface IList<T> {

IIterator<T> iterator();

T get(int index);

int size();

void add(T obj);

}

class IListImpl<T> implements IList<T> {

private List<T> list;

private int index;

public IListImpl() {

list = new ArrayList<T>();

index = 0;

}

@Override

public IIterator<T> iterator() {

return new IIteratorImpl<T> (this);

}

@Override

public T get(int index) {

return list.get(index);

}

@Override

public int size() {

return list.size();

}

@Override

public void add(T obj) {

list.add(obj);

}

}

public class IteratorTest {

public static void main(String[] args) {

// 2 ways of iteration

IList<String> list = new IListImpl<String>();

list.add(“a”);

list.add(“b”);

list.add(“c”);

// 1st way

System.out.println(“1. using iterator to traverse:”);

IIterator<String> iter = list.iterator();

while (iter.hasNext()) {

System.out.println(iter.next());

}

// 2nd way

System.out.println(“2. using list to traverse: ”);

for (int i=0; i<list.size(); i++) {

System.out.println(list.get(i));

}

}

}

结果:

1. using iterator to traverse:

a

b

c

2. using list to traverse:

a

b

c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: