您的位置:首页 > 编程语言 > Java开发

Java设计模式之迭代器模式

2017-04-20 22:09 411 查看
一、定义

提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

二、角色

1、Iterator(抽象迭代器):定义访问和遍历元素的接口。

2、ConcreteIterator (具体迭代器):具体迭代器实现迭代器接口。

3、Aggregate (抽象集合):定义创建相应迭代器对象的接口

4、ConcreteAggregate (具体集合):实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例

三、demo

1、抽象迭代器

package com.example.interator;

public interface Iterator<E> {
boolean hasNext();
E next();

}


2、具体迭代器

package com.example.interator;

import java.util.List;

public class ConcreteInterator<E> implements Iterator<E> {
private List<E> list;
private int cursor = 0;

public ConcreteInterator(List<E> list) {
this.list = list;
}

@Override
public boolean hasNext() {
return cursor < list.size();
}

@Override
public E next() {
E e = null;
if (hasNext()) {
e = list.get(cursor++);

}
return e ;
}

}


3、抽象集合类

package com.example.interator;

public interface Aggregate<E> {
void add(E e);
void remove(E e);
Iterator<E> iterator();

}


4、具体集合类

package com.example.interator;

import java.util.ArrayList;
import java.util.List;

public class ConcreteAggregate<E> implements Aggregate<E>{
private List<E> list = new ArrayList<E>();
@Override
public void add(E e) {
list.add(e);

}

@Override
public void remove(E e) {
list.remove(e);

}

@Override
public Iterator<E> iterator() {
return new ConcreteInterator<E>(list);

}

}


5、客户类

package com.example.interator;

public class Client {

public static void main(String[] args) {
ConcreteAggregate<String> aggregate = new ConcreteAggregate<String>();
aggregate.add("aaa");
aggregate.add("bbb");

//遍历
Iterator<String> iterator = aggregate.iterator();
while (iterator.hasNext()) {
String result = iterator.next();
System.out.println("结果: " + result);

}

}

}


打印结果

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