前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA 设计模式 迭代器模式

JAVA 设计模式 迭代器模式

作者头像
静默虚空
发布2018-01-05 11:18:22
8050
发布2018-01-05 11:18:22
举报

用途

迭代器模式 (Iterator)

提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示

迭代器模式是一种行为型模式

结构

图-迭代器模式结构图

Iterator : 定义访问元素的接口。

 interface Iterator {
 public Object first();
 public Object next();
 public boolean isDone();
 public Object currentItem();
 } 

ConcreteIterator : 实现 Iterator 接口。记录当前访问的元素在集合中的位置信息。

 class ConcreteIterator implements Iterator {
 private int current = 0;
 private ConcreteAggregate aggregate;
 
 public ConcreteIterator(ConcreteAggregate aggregate) {
 this.aggregate = aggregate;
     }
 
     @Override
 public Object first() {
 return aggregate.get(0);
     }
 
     @Override
 public Object next() {
         current++;
 if (current < aggregate.size()) {
 return aggregate.get(current);
         }
 return null;
     }
 
     @Override
 public boolean isDone() {
 return (current >= aggregate.size()) ? true : false;
     }
 
     @Override
 public Object currentItem() {
 return aggregate.get(current);
     }
 } 

Aggregate : 定义创建 Iterator 对象的接口。

 interface Aggregate {
 public Iterator CreateIterator();
 } 

ConcreteAggregate : 实现 Iterator 接口,返回一个合适的 ConcreteIterator 实例。

 class ConcreteAggregate implements Aggregate {
 private List<Object> items = new ArrayList<Object>();
 
     @Override
 public Iterator CreateIterator() {
 return new ConcreteIterator(this);
     }
 
 public int size() {
 return items.size();
     }
 
 public Object get(int index) {
 return items.get(index);
     }
 
 public void set(int index, Object element) {
         items.set(index, element);
     }
 
 public void add(Object element) {
         items.add(element);
     }
 } 

测试代码

 public class IteratorPattern {
 public static void main(String[] args) {
         ConcreteAggregate aggregate = new ConcreteAggregate();
         aggregate.add("张三");
         aggregate.add("李四");
         aggregate.add("王五");
         aggregate.add("赵六");
 
         Iterator iter = new ConcreteIterator(aggregate);
         Object item = iter.first();
         System.out.println("第一个人是:" + item);
         System.out.println("所有人的名单是:");
 while (!iter.isDone()) {
             System.out.println(iter.currentItem());
             iter.next();
         }
     }
 } 

运行结果

第一个人是:张三
 所有人的名单是:
 张三
 李四
 王五
 赵六

应用场景

访问一个聚合对象的内容而无需暴露它的内部表示。 支持对聚合对象的多种遍历。 为遍历不同的聚合结构提供一个统一的接口。

推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》《HeadFirst设计模式》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-01-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档