一:迭代子模式
说实话,写这篇的时候心里完全是忐忑的。因为可能到现在也不明白为什么要有迭代器模式,她和我们在jdk中的迭代模式有什么区别?或者说是为了我们去理解jdk的迭代模式么?欢迎看到这篇文章的大佬们给予指导。
迭代器模式中的角色:
迭代接口(Iterator):用于对于集合数据的遍历。
迭代接口实现(ConcreteIterator):迭代接口的实现
容器接口(Aggregate):定义一个集合的容器
容器实现(ConcreteAggregate):容器的实现
二:代码详解
1.迭代接口
package test;
/*
* 迭代器接口,主要用来实现遍历等功能
*/
public interface Iterator<T> {
/*
* 是否有下一个元素
*/
boolean hashNext();
/*
* 下一个元素
*/
T next();
}
2.迭代实现
package test;
import java.util.ArrayList;
import java.util.List;
/*
* 迭代器接口的实现
*/
public class ConcreteIterator<T> implements Iterator<T> {
//集合
private List<T> list=new ArrayList<>();
//下标
private static int index=0;
@Override
public boolean hashNext() {
return index !=list.size();
}
@Override
public T next() {
T obj=null;
if(this.hashNext()){
obj=this.list.get(index);
}
return obj;
}
}
3.集合容器
package test;
/*
* 容器接口
*/
public interface Aggregate<T> {
/**
* 添加一个元素
* @param <T>
* @param obj 元素对象
*/
void add(T obj);
/**
* 移除一个元素
* @param <T>
* @param obj 元素对象
*/
void remove(T obj);
/**
* 获取容器的迭代器
* @param <T>
* @return 迭代器对象
*/
Iterator<T> iterator();
}
4.容器实现
package test;
import java.util.ArrayList;
import java.util.List;
public class ConcreteAggregate<T> implements Aggregate<T> {
private List<T> list=new ArrayList<>();
@Override
public void add(T obj) {
list.add(obj);
}
@Override
public void remove(T obj) {
list.remove(obj);
}
@Override
public Iterator<T> iterator() {
return new ConcreteIterator<>();
}
}
5.测试
package test;
public class test {
public static void main(String[] args) {
Aggregate<String> agt = new ConcreteAggregate<>();
agt.add("aLin");
agt.add("jack");
agt.add("yushao");
Iterator<String> itr = agt.iterator();
while (itr.hashNext()) {
System.out.println("?"+itr.next());
}
}
}