行为型设计模式-迭代器模式
来源:互联网 发布:高圆圆的淘宝店叫什么 编辑:程序博客网 时间:2024/05/22 06:34
1 迭代器模式概念
1.1 介绍
迭代器模式,又叫做游标模式,是行为型设计模式之一。我们知道对容器对象的访问必然会涉及遍历算法,我们可以将遍历的方法封装在容器中,或者不提供遍历方法,让使用容器的人自己去实现去吧。这两种情况好像都能够解决问题。
然而在前一种情况,容器承受了过多的功能,它不仅要负责自己“容器”内的元素维护(添加、删除等等),而且还要提供遍历自身的接口;而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历。第二种方式倒是省事,却又将容器的内部细节暴露无遗。
正因于此,迭代器模式应运而生,在客户访问类与容器体之间插入一个第三者–迭代器,很好的解决了上述弊端。
1.2 定义
提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。
1.3 使用场景
遍历一个容器对象时。
2 迭代器模式UML类图通用
3 迭代器模式简单实现
(1)抽象迭代接口
/** * 抽象迭代接口 * @param <T> */public interface Iterator<T> { // 是否还有下一个元素 boolean hasNext(); T next();}
(2)具体的迭代角色
/** * 具体的迭代角色-间谍 * @param <T> */public class ConcreteItertor<T> implements Iterator<T> { private List<T> list = new ArrayList<>(); private int cursor = 0; public ConcreteItertor(List<T> list) { this.list = list; } @Override public boolean hasNext() { return cursor != list.size(); } @Override public T next() { T obj = null; if (this.hasNext()) { obj = list.get(cursor++); } return obj; }}
(3)容器的接口
/** * 容器的接口 */public interface Aggregate<T> { void add(T t); void remove(T t); Iterator<T> iterator();}
(4)具体的容器接口
/** * 具体的容器接口——军队 * @param <T> */public class ConcreteAggregate<T> implements Aggregate<T>{ private List<T> list=new ArrayList<>(); @Override public void add(T t) { list.add(t); } @Override public void remove(T t) { list.remove(t); } @Override public Iterator<T> iterator() { return new ConcreteItertor<>(list); }}
(5)客户端
public class Client { public static void main(String[] args) { // 实例化容器类对象 Aggregate<String> aggregate = new ConcreteAggregate<>(); aggregate.add("小兵1"); aggregate.add("小兵2"); aggregate.add("小兵3"); Iterator<String> iterator = aggregate.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } }}
(6)结果
4 Android源码中的迭代器模式
(1)Cursor
当我们使用SQLiteDatabase的query方法查询数据库时,会返回一个Cursor游标对象,该游标的实质就是一个具体的迭代器,我们可以使用它来遍历数据库查询所得的结果集。
5 总结
迭代器模式发展至今,几乎所有的高级语言都有相应的内置实现,对于开发者而言,已经极少会自己去实现迭代器了,所以本章内容更多的是了解而非应用。
5.1 优点
(1)符合面向对象设计原则中的单一职责原则。
(2)支持对容器对象的多种遍历。弱化了容器类与遍历算法之间的关系。
5.2 缺点
(1)类文件的增加。
(2)会出现ConcurrentModificationException异常。
(3)遍历过程是一个单向且不可逆的遍历。
6 参考文章与链接
《Android源码设计模式解析与实战》
《设计模式之禅》
《Android源码设计模式解析与实战》读书笔记(十四)
- 设计模式 - 行为型模式 - 迭代器模式
- 设计模式->行为型模式->迭代器模式
- 设计模式--行为型--迭代器模式
- [设计模式-行为型]迭代器模式(Iterator)
- 设计模式-行为型之迭代器模式
- 行为型设计模式-迭代器模式
- 行为型设计模式-迭代器模式
- 设计模式-行为型模式
- [设计模式]--行为型模式
- 设计模式:行为型模式
- 设计模式--行为型模式
- 设计模式--行为型模式
- 设计模式----行为型模式
- 设计模式 -- 行为型模式
- 设计模式-行为-迭代器
- 行为型设计模式
- 行为型设计模式
- 设计模式-行为型
- 快速打造 RecyclerView 悬浮吸顶效果
- 拷贝构造函数
- HBase性能优化方法总结
- 使用Java MD5 为文件和字符串加密
- Dom
- 行为型设计模式-迭代器模式
- Android基础知识---7.1新特性:Shortcuts详解
- 学员笔记展示 临时表
- JVM结构、GC工作机制详解
- android 软键盘和布局的冲突
- 一文讲透区块链技术原理
- 爬取国内主流电影网站的电影更新情况
- 放大镜jquery
- 高精度加法的c语言实现