设计模式_16:迭代器模式
来源:互联网 发布:西游之路法相进阶数据 编辑:程序博客网 时间:2024/05/18 16:17
迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
当你需要对聚集进行多种方式遍历时,可以考虑用迭代器模式;
import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) { Aggregate<String> concreteAggregate = new ConcreteAggregate<>(); concreteAggregate.add("同学1号"); concreteAggregate.add("同学2号"); concreteAggregate.add("同学3号"); concreteAggregate.add("同学4号"); Iterator iterator = concreteAggregate.createIterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } System.out.println("-----------------------------"); Iterator<String> iteratorDesc = new ConcreteIteratorDesc<>(concreteAggregate); while (iteratorDesc.hasNext()){ System.out.println(iteratorDesc.next()); } }}//聚集抽象类interface Aggregate<T> { Iterator createIterator(); void add(T t); T getByIndex(int index); int getCount();}//具体聚集类class ConcreteAggregate<T> implements Aggregate<T>{ private List<T> list = new ArrayList<>(); @Override public Iterator createIterator() { return new ConcreteIterator<>(this); } @Override public void add(T t){ this.list.add(t); } @Override public T getByIndex(int index){ return this.list.get(index); } @Override public int getCount(){ return this.list.size(); }}//迭代器抽象类interface Iterator<T> { T next(); boolean hasNext(); T currentItem();}//具体迭代器类(顺序)class ConcreteIterator<T> implements Iterator<T>{ private ConcreteAggregate<T> aggregate; private int currentIndex = 0; //当前集合的下标 public ConcreteIterator(ConcreteAggregate<T> aggregate) { this.aggregate = aggregate; } @Override public T next() { T t = this.currentItem(); currentIndex++; return t; } @Override public boolean hasNext() { return currentIndex < this.aggregate.getCount(); } @Override public T currentItem() { return this.aggregate.getByIndex(currentIndex); }}//具体迭代器类(逆序)class ConcreteIteratorDesc<T> implements Iterator<T>{ private Aggregate<T> aggregate; private int currentIndex = 0; //当前集合的下标 public ConcreteIteratorDesc(Aggregate<T> aggregate) { this.aggregate = aggregate; this.currentIndex = aggregate.getCount() - 1; } @Override public T next() { T t = this.currentItem(); currentIndex--; return t; } @Override public boolean hasNext() { return currentIndex >= 0; } @Override public T currentItem() { return this.aggregate.getByIndex(currentIndex); }}运行结果:
同学1号同学2号同学3号同学4号-----------------------------同学4号同学3号同学2号同学1号
其实JAVA/C#的foreach in就是隐式调用了迭代器模式
阅读全文
0 0
- 设计模式_16:迭代器模式
- 简单工厂模式,工厂方法模式,抽象工厂模式 三大案例 (设计模式_16)
- 设计模式-迭代器模式
- 设计模式 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 【设计模式】迭代器模式
- 设计模式-迭代器模式
- 设计模式- 迭代器模式
- 设计模式 - 迭代器模式
- 设计模式:迭代器模式
- 设计模式 - 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 设计模式---迭代器模式
- 设计模式---迭代器模式
- 【设计模式】迭代器模式
- 设计模式 迭代器模式
- 使用 Annotation将配置资源注入到Bean中
- Android开发知识(八):Android事件处理机制:事件分发、传递、拦截、处理机制的原理分析(中)
- cout和printf输出结果不一样
- java开发常用词汇02
- 用main调试spring
- 设计模式_16:迭代器模式
- usaco Mother's Milk
- 使用annotation减少spring bean的配置
- 前端跨域
- 判断奇偶
- APNS导致消息丢失和发送效率原因
- Git远程仓库地址变更本地如何修改
- Axon Framework官方文档(五)
- 项目开发中的人月及如何计算