电子商务设计网站建设,比较大的做网站的公司,太原网站建设优化,深圳优化网站公司哪家好15.迭代器模式
定义#xff1a;我们可以用相同的方式处理集合#xff0c;无论它是列表还是数组#xff0c;它都提供了一种迭代其元素而不用暴露其内部结构的机制#xff0c;更重要的是#xff0c;不同的类型的集合都可以使用相同的统一机制#xff0c;这种机制则被称为 …15.迭代器模式
定义我们可以用相同的方式处理集合无论它是列表还是数组它都提供了一种迭代其元素而不用暴露其内部结构的机制更重要的是不同的类型的集合都可以使用相同的统一机制这种机制则被称为 迭代器模式。 目的提供一种顺序遍历聚合对象元素而不暴露其内部实现的方法。 主要角色
Aggregate抽象容器负责提供创建具体迭代器角色的接口对应于java.util.Collection接口。Iterator抽象迭代器迭代器的抽象类它定义遍历容器对象的操作以及返回对象的操作ConcreteAggregate具体容器主要是可以实现内部不同的结构。但会暴露处理遍历容器的具体迭代器。ConcreteIterator具体迭代器处理特定的具体容器类的具体迭代器实际上对于每个容器具体容器都必须实现一个具体的迭代器。
一、先是创建抽象容器定义几个基本添加删除元素方法以及迭代器
public interface Aggregate {// 添加元素void add(Object object);// 移除元素void remove(Object object);// 迭代器Iterator iterator();
}二、创建抽象迭代器遍历容器中的数据
public interface IteratorE {// 判断容器是否有值boolean hasNext();// 把游标执向下一个指针void next();// 当前遍历的数据E currentItem();
}三、开始定义我们具体的容器了内部定一个ArrayList容器用来存放数据当然这里大家也可以改成其他的容器 比如说用Vector 或者其他的 栈、树、图等
NoArgsConstructor
AllArgsConstructor
Data
public class ConcreteAggregate implements Aggregate {private ArrayList arrayList new ArrayList();Overridepublic void add(Object object) {this.arrayList.add(object);}Overridepublic void remove(Object object) {this.arrayList.remove(object);}Overridepublic Iterator iterator() {return new ConcreteIterator(this.arrayList);}
}四、就是实现具体的迭代器了
Data
NoArgsConstructor
AllArgsConstructor
public class ConcreteIteratorT implements IteratorT {private int cursor; // 游标private ArrayList arrayList;Overridepublic boolean hasNext() {return this.cursor ! arrayList.size();}Overridepublic void next() {cursor;System.out.println(cursor cursor);}Overridepublic T currentItem() {if (cursorarrayList.size()){throw new NoSuchElementException();}T t (T) arrayList.get(cursor);this.next();return t;}
}五、迭代器测试
public class IteratorTest {public static void main(String[] args) {Aggregate aggregate new ConcreteAggregate();aggregate.add(java);aggregate.add(c);aggregate.add(php);aggregate.add(jsp);Iterator iterator aggregate.iterator();while (iterator.hasNext()){System.out.println(iterator.currentItem());}}
}