迭代器模式
来源:互联网 发布:多用户博客系统源码 编辑:程序博客网 时间:2024/06/08 00:57
迭代器模式
迭代器模式(iterator pattern),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
提供一中遍历集合的方法,但是会隐藏集合的保存及读取逻辑。迭代器会提供如开始,下一个,是否结束,当前的正在访问的一项等统一的接口。
public interface Iterator<T> {public abstract T first();public abstract T next();public abstract boolean isDone(); public abstract T currentItem();}
public interface Aggregate<T> {public abstract Iterator<T> getIterator();}
public class ConcreteAggregateimplements Aggregate<String>{
private List<String>userNames = new ArrayList<String>();
@Override
public Iterator<String> getIterator() {
return new ConcreteIterator(this);
}
public int getCount() {
return userNames.size();
}
public void add(String name) {
userNames.add(name);
}
public String get(inti) {
return userNames.get(i);
}
}
public class ConcreteIterator implements Iterator<String>{private ConcreteAggregate aggregate;private int currentPoc = 0;public ConcreteIterator(ConcreteAggregate aggregate) {this.aggregate = aggregate;}@Overridepublic String first() {// TODO Auto-generated method stubreturn aggregate.get(0);}@Overridepublic String next() { String item = null;currentPoc++;if (currentPoc<aggregate.getCount()) {item = aggregate.get(currentPoc);}return item;}@Overridepublic boolean isDone() { boolean end = currentPoc > aggregate.getCount()-1;return end;}@Overridepublic String currentItem() { return aggregate.get(currentPoc);}}
ConcreteAggregate aggregate = new ConcreteAggregate();aggregate.add("#1");aggregate.add("#2");aggregate.add("#3");aggregate.add("#4");aggregate.add("#5");aggregate.add("#6");aggregate.add("#7");aggregate.add("#8");Iterator<String> iterator = aggregate.getIterator();while (!iterator.isDone()) {System.out.println(iterator.currentItem());iterator.next();}}
结果如下:
#1
#2
#3
#4
#5
#6
#7
#8
阅读全文
0 0
- 行为模式-迭代器模式
- 设计模式-迭代器模式
- 设计模式 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 【设计模式】迭代器模式
- 设计模式-迭代器模式
- 设计模式- 迭代器模式
- 设计模式 - 迭代器模式
- 设计模式:迭代器模式
- 行为模式-迭代器模式
- 设计模式 - 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 设计模式---迭代器模式
- 设计模式---迭代器模式
- 【设计模式】迭代器模式
- 设计模式 迭代器模式
- web2py 远程开发
- genetator的用法
- 2017 Java开发面试题-数据库篇(1)
- bzoj1631 [Usaco2007 Feb]Cow Party(Dijkstra)
- Sqlite3 和Sqlitedbms数据库环境搭建与性能测试
- 迭代器模式
- c层做power按键长按识别
- Java练习(1)
- SparkML (一) Spark的环境搭建与运行
- maven项目中奇怪的错误
- Fiddler session的请求/响应类型和图标对照表
- 小数分频
- CodeChef PROTEPOI Protecting The Poison
- file类递归练习