设计模式-行为型- 迭代器模式(Iterator)
来源:互联网 发布:2016中国域名备案后缀 编辑:程序博客网 时间:2024/04/29 12:48
定义
又叫游标(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查看:点击此处
4 0
- [设计模式-行为型]迭代器模式(Iterator)
- 设计模式(十四)迭代器模式(Iterator)-行为型
- 设计模式之 迭代器(Iterator)----对象行为型模式
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式--迭代器模式Iterator(行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式-行为型- 迭代器模式(Iterator)
- 行为型模式-----迭代器模式(Iterator)
- Iterator迭代器设计模式学习(对象行为型)
- 行为设计模式---迭代器模式(Iterator)
- 【设计模式】行为模式之迭代器Iterator
- 设计模式(16)-行为型-迭代器模式(Iterator)
- 设计模式(行为型)之迭代器模式(Iterator Pattern)
- [设计模式笔记]三. 行为型模式--18. Iterator模式(迭代器)对象行为型模式(一)
- C#面向对象设计模式纵横谈 学习笔记18 Iterator迭代器模式(行为型模式)
- 十六、迭代器模式Iterator(行为型)
- char const* 和 char* 的区别和联系
- python使用dom操作xml
- 暑期赛c题 存储历史状态的树状数组+二分
- jquery ajax 内容
- android数据库持久化框架
- 设计模式-行为型- 迭代器模式(Iterator)
- JVM虚拟机阅读笔记
- android stuido WebView 如何本地加载html
- 网易笔试编程题:最少时间落入陷阱(C++)
- Windows下Nexus 5的Android 5.0以上版本官方ROM的刷机教程
- TabLayout的简单使用
- 第二篇《iOS中使用AFNetWorking时如何将responseObject传出》
- Java8新特性——Lambda表达式(一)
- php支持八种原始类型: