电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

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


发布日期:2020/8/13
 

概述

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

适用性

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

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

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

参与者

Iterator

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

ConcreteIterator

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

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

Aggregate

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

ConcreteAggregate

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

类图

示例代码:

package comsqlactioned;

import javautilArrayList;

import javautilList;

/**

* 迭代器模式 实现示例

* @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 = ;

thislist = list;

}

@Override

public T next() {

T t = listget(index);

index++;

return t;

}

@Override

public void first() {

index = ;

}

@Override

public void last() {

index = listsize();

}

@Override

public boolean hasNext() {

return index < listsize();

}

}

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 = ;

}

@Override

public IIterator<T> iterator() {

return new IIteratorImpl<T> (this);

}

@Override

public T get(int index) {

return listget(index);

}

@Override

public int size() {

return listsize();

}

@Override

public void add(T obj) {

listadd(obj);

}

}

public class IteratorTest {

public static void main(String[] args) {

// ways of iteration

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

listadd(a);

listadd(b);

listadd(c);

// st way

Systemoutprintln( using iterator to traverse:);

IIterator<String> iter = erator();

while (iterhasNext()) {

Systemoutprintln(iternext());

}

// nd way

Systemoutprintln( using list to traverse: );

for (int i=; i<listsize(); i++) {

Systemoutprintln(listget(i));

}

}

}

结果:

using iterator to traverse:

a

b

c

using list to traverse:

a

b

c

上一篇:针对用户界面的多线程

下一篇:爪哇语言工厂方法创立性模式介绍(下)