JAVA 设计模式 迭代器模式

xiaoxiao2021-02-28  89

用途


迭代器模式 (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设计模式》

 

转载请注明原文地址: https://www.6miu.com/read-67190.html

最新回复(0)