设计模式之迭代器模式
来源:互联网 发布:微信公众平台seo 编辑:程序博客网 时间:2024/06/13 10:19
迭代器模式曾经是一种最常见、最简单的设计模式,提供了一种顺序访问某个集合中所有元素的解决方案,而不用了解元素的底层操作。现在的新兴语言都将迭代器集成了进去,但是了解迭代器模式的实现对理解面向对象开发而言仍然尤其意义。
GOF对迭代器模式的定义是:提供一种方法顺序访问聚合对象中的各个元素,而又不暴露该对象的内部表示。以筛选简历简单演示下。
//抽象聚集类代码public abstract class Aggregate {public abstract Iterator CreateIterator();}
//一个具体的聚集类public class ConcreteAggregate extends Aggregate {private List<Object> items = new ArrayList<Object>();@Overridepublic Iterator CreateIterator() {// return new ConcreteI;return null;}public int getSize() {return items.size();}public Object getItem(int index) {return items.get(index);}public void setItem(int index, Object obj) {items.add(index, obj);}}
//抽象的迭代器代码public abstract class Iterator {public abstract Object First();public abstract Object Next();public abstract Boolean IsDone();public abstract Object CurrentItem();}
//具体的迭代器代码public class ConcreteIterator extends Iterator {private ConcreteAggregate aggregate;private int current = 0;public ConcreteIterator(ConcreteAggregate aggregate) {super();this.aggregate = aggregate;}@Overridepublic Object First() {// TODO Auto-generated method stubreturn this.aggregate.getItem(0);}@Overridepublic Object Next() {Object obj = null;current++;if(current < this.aggregate.getSize())obj = this.aggregate.getItem(current);return obj;}@Overridepublic Boolean IsDone() {if(current >= this.aggregate.getSize())return true;elsereturn false;}@Overridepublic Object CurrentItem() {// TODO Auto-generated method stubreturn this.aggregate.getItem(current);}}客户端实现
public class Client {public static void main(String[] args) {ConcreteAggregate aggregate = new ConcreteAggregate();for(int i = 0;i<10;i++) {aggregate.setItem(i, "求职者" + (i +1));}Iterator iterator = new ConcreteIterator(aggregate);while(!iterator.IsDone()) {System.out.println(iterator.CurrentItem() + "请于明日14:00来我司面试");iterator.Next();}}}运行截图
迭代器是为容器而生的,其本质就是一种遍历算法。在迭代器模式中,通常会提供一个外部的迭代器以便对当前聚合对象进行遍历和访问,迭代器定义的是一个访问该聚合元素的接口,并且可以跟踪当前所遍历的元素,以便了解那些元素已经遍历过而那些没有被遍历过。
以上内容,整理自刘径舟,张玉华编著的《设计模式其实很简单》读书笔记,欢迎转载
阅读全文
0 0
- 设计模式之迭代器模式
- 设计模式之 迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之--迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之-迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式 之 迭代器模式
- 设计模式 之 迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- Android抽象布局——include、merge 、ViewStub
- 批处理去除指定字符前所有的0
- 二分法找中位数
- Go游戏服务器开发的一些思考(十三):behavior3go的一些坑(备忘)
- L1-009. N个数求和
- 设计模式之迭代器模式
- Xilinx ZYNQ 7000+Vivado2015.2系列(二)之奇数分频和逻辑分析仪(ILA)的使用
- 如果一个网站后台能有机会接触到用户的明文密码,那就是流氓行为!
- PHP面试总结(3)-- Linux
- The content of element type "struts" must match "(package|include|bean|constant)*".
- 数据库那点事(Mysql)-完
- Django在admin后台集成TinyMCE富文本编辑器添加上传图片功能
- C#回顾学习笔记三十五:泛型集合List
- sklearn 决策树可视化