设计模式-行为型- 迭代器模式(Iterator)
2016-08-27 11:46
429 查看
定义
又叫游标(Cursor)模式,提供一种方法访问一个容器(container)对象中的各个元素,而又不暴露该对象的内部细节角色
迭代器角色(Iterator):负责定义访问和遍历元素的接口具体迭代器角色(Concrete Iterator):实现迭代器接口,并要记录遍历中的当前位置
容器角色(Container):负责提供创建具体迭代器角色的接口
具体容器角色(Concrete Container):实现创建具体迭代器角色的接口, 这个具体迭代器角色与该容器的结构相关
优点
它支持以不同的方式遍历一个聚合对象在同一个聚合上可以有多个遍历
增加新的聚合类和迭代器类都很方便,无须修改原有代码
缺点
新增一个聚合类,就要相应的实现一个迭代器类,类的个数增多适用场景
访问一个对象的内容,又不想暴露对象的内部结构对对象进行遍历
类图
package com.vapy.behavior.Iterator; /** * * @author vapy 2016年8月27日 * */ public interface Aggregat { public Iterator createIterator(); public void add(Object obj); }
package com.vapy.behavior.Iterator; import java.util.Vector; /** * * @author vapy 2016年8月27日 * */ public class ConcreteAggregat implements Aggregat { private Vector<Object> vector = null; public Vector<Object> getVector() { return vector; } public void setVector(Vector<Object> vector) { this.vector = vector; } public ConcreteAggregat(){ vector = new Vector<Object>(); } @Override public void add(Object obj) { vector.add(obj); } @Override public Iterator createIterator() { return new ConcreteIterator(vector); } }
package com.vapy.behavior.Iterator; /** * * @author vapy 2016年8月27日 * */ public interface Iterator { public Object next(); public Object currentItem(); public boolean isDone(); public Object first(); }
package com.vapy.behavior.Iterator; import java.util.Vector; /** * * @author vapy 2016年8月27日 * */ public class ConcreteIterator implements Iterator { private int cursor = -1; private Vector<Object> vector = null; public ConcreteIterator(final Vector<Object> vector){ this.vector = vector; } @Override public Object first() { return vector.get(0); } @Override public Object next() { cursor ++; return vector.get(cursor); } @Override public Object currentItem() { return vector.get(cursor); } @Override public boolean isDone() { if(cursor >= this.vector.size() - 1){ return true; } else { return false; } } }
package com.vapy.behavior.Iterator; /** * * @author vapy 2016年8月27日 * */ public class Client { public static void main(String[] args) { final Aggregat agg = new ConcreteAggregat(); agg.add("abc"); agg.add("def"); final Iterator iterator = agg.createIterator(); System.out.println(iterator.first()); while(!iterator.isDone()){ System.out.println(iterator.next()); } } }
本文代码可在github查看:点击此处
相关文章推荐
- 设计模式学习之迭代器模式(Iterator,行为型模式)(17)
- 设计模式-行为型-迭代器模式(Iterator)
- 十九.行为型设计模式——Iterator Pattern(迭代器模式)
- [设计模式-行为型]迭代器模式(Iterator)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- C#面向对象模式设计第十八讲:Iterator 迭代器模式(行为型模式)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- [导入]C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式.zip(8.04 MB)
- 23种设计模式(15)_行为型_迭代器模式(Iterator Pattern)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- [设计模式-行为型]迭代器模式(Iterator)
- 设计模式(16)-行为型-迭代器模式(Iterator)
- 设计模式17:Iterator 迭代器模式(行为型模式)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式--迭代器模式Iterator(行为型)
- JAVA设计模式(21):行为型-迭代器模式(Iterator)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式—Iterator迭代器模式
- 设计模式笔记(18)---迭代器模式(行为型)