迭代器模式--没错就是Iterator
来源:互联网 发布:神奇的印度人 知乎 编辑:程序博客网 时间:2024/05/23 19:13
相信Java中的Iterator很多人都用过,而本文却不是介绍Iterator的,
而是介绍Iterator中用到的迭代器模式。
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,
而又不暴露该对象的内部表示。
一个聚集对象,而不管这些对象是什么都需要遍历的时候,你就应该考虑用
迭代器模式。
下面看看类图吧:
类图结构还是比较简单的,左边两个
Aggregate:聚集的抽象父类,用于定义规范
ConcreteAggregate:聚集的实际实现类
右边两个
Iterator:迭代器的抽象类,用于定义相关方法。
ConcreteIterator:具体的迭代器实现类。
下面看类代码:
Iterator类:
package com.blog.anla.Iterator;/** * 迭代器抽象类,用于定义开始对象,得到下一个对象,判断是否到尾等 * 抽象方法 * @author U-ANLA * */public abstract class Iterator {public abstract Object first();public abstract Object next();public abstract boolean isOver();public abstract Object currentItem();}
Aggregate类:
package com.blog.anla.Iterator;/** * 聚集抽象类 * @author U-ANLA * */public abstract class Aggregate {public abstract Iterator createIterator();}
ConcreteIterator类:
package com.blog.anla.Iterator;/** * 具体的迭代器 * @author U-ANLA * */public class ConcreteIterator extends Iterator{private ConcreteAggregate aggregate;private int current = 0;public ConcreteIterator(ConcreteAggregate aggregate){this.aggregate = aggregate;}@Overridepublic Object first() {return aggregate.getItems().get(0);}@Overridepublic Object next() {Object ret = null;current++;if(current < aggregate.count()){ret = aggregate.getItems().get(current);}return ret;}@Overridepublic boolean isOver() {return current >= aggregate.count() ? true : false;}@Overridepublic Object currentItem() {return aggregate.getItems().get(current);}}
ConcreteAggregate类:
package com.blog.anla.Iterator;import java.util.ArrayList;import java.util.List;/** * 具体的待遍历的类 * @author U-ANLA * */public class ConcreteAggregate extends Aggregate {private List<Object> items = new ArrayList<Object>();@Overridepublic Iterator createIterator() {return new ConcreteIterator(this);}public int count(){return items.size();}public List<Object> getItems() {return items;}public void setItems(List<Object> items) {this.items = items;}}
有木有看完这篇一起去看看Java中Iterator实现原理呢?
赠人玫瑰手留余香(oo)
阅读全文
0 0
- 迭代器模式--没错就是Iterator
- 没错我就是唐伯虎
- 没错,我就是个妹子
- VMware的虚拟机NAT模式和主机ping时通时不通,网络配置都没错就是不正常
- 没错,就是多功能的RecyclerView分割线
- 算法---程序的灵魂,没错就是灵魂!
- 迭代器模式(Iterator Pattern)
- 迭代器(Iterator)模式
- 迭代器模式(Iterator pattern)
- 迭代器模式(Iterator Pattern)
- 迭代器模式(Iterator pattern)
- 迭代器模式(Iterator)
- Iterator(迭代器)模式
- 迭代器模式(Iterator pattern)
- Iterator 迭代器模式
- 迭代器模式(Iterator pattern)
- 设计模式 -- Iterator(迭代器)
- 迭代器模式(Iterator)
- VS 安装助手,弹出“The security key for this program currently stored on your system does not appear to be ”
- 如何对迭代器做切片操作
- 机器视觉缺陷检测-边学边做-相机选取
- 展开一个嵌套的列表
- HDU 1027 Ignatius and the Princess II(逆康托展开)
- 迭代器模式--没错就是Iterator
- hdu2845
- PAT-二叉搜索树
- 杭电acm2524矩形A + B(水题)
- FreeMaker教程(一)-----FreeMaker简介
- 如何在一个for语句中迭代多个可迭代对象
- 数组(2)
- Linux 查询网络状态和设置wlan相关
- 架构师日记——Varnish简介和安装