迭代器设计模式(Iterator Pattern):它提供一种按顺序访问容器中对象的元素,而又无须暴露该容器的内部表示。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内部元素的组成结构;
迭代器模式的核心是把容器中的元素的迭代抽离到迭代器中,提供一致访问的接口;
它适用于以下场景:
迭代器设计模式主要4个角色:
【案例】
编写一个容器,提供增、删元素的方法;并提供迭代这些元素的方法;
package com.pattern.demo01_手动实现观察者设计模式;
/**
* @author lscl
* @version 1.0
* @intro:
*/
public interface Iterator<E> {
E next();
boolean hasNext();
}
package com.pattern.demo01_手动实现观察者设计模式;
import java.util.List;
/**
* @author lscl
* @version 1.0
* @intro:
*/
public class IteratorImpl<E> implements Iterator<E> {
// 需要迭代的容器
private List<E> list;
// 记录迭代的位置
private int cursor = 0;
// 当前迭代的元素
private E element;
public IteratorImpl(List<E> list) {
this.list = list;
}
@Override
public E next() {
element = list.get(cursor);
cursor++;
return this.element;
}
@Override
public boolean hasNext() {
// 已经获取到list集合最大索引值
if (cursor >= list.size()) {
return false;
}
return true;
}
}
package com.pattern.demo01_手动实现观察者设计模式;
/**
* @author lscl
* @version 1.0
* @intro:
*/
public interface IAggregate<E> {
void add(E e);
void remove(E e);
Iterator<E> iterator();
}
package com.pattern.demo01_手动实现观察者设计模式;
import java.util.ArrayList;
import java.util.List;
/**
* @author lscl
* @version 1.0
* @intro:
*/
public class AggregateImpl<E> implements IAggregate<E> {
private List<E> list;
public AggregateImpl() {
this.list=new ArrayList<>();
}
@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 IteratorImpl<>(list);
}
}