迭代器 (Iterator)模式:迭代器模式提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示。



迭代器模式由以下角色组成:

迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。

具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。

容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。

具体容器角色(Concrete Container):具体容器角色实现创建具体迭代器角色的接口。这个具体迭代器角色与该容器的结构相关。

迭代器设计模式结构如如下:

java containsKey 会拆箱么_迭代器

从结构上可以看出,迭代器模式在客户与容器之间加入了迭代器角色。迭代器角色的加入,就可以很好的避免容器内部细节的暴露,而且也使得设计符号“单一职责原则”。

模拟代码如下:

抽象迭代器类:

package designPattern.iterator;

public interface Iterator<T> {

   public T next();
   public boolean hasNext();
}

 

 实现迭代器类:

package designPattern.iterator;

import java.util.ArrayList;
import java.util.List;

public class ConcreteIterator<T> implements Iterator<T> {

  private List<T> list = new ArrayList<T> ();
  private int cursor =0;
  public ConcreteIterator(List<T> list){
   this.list = list;
  }
  public boolean hasNext() {
   if(cursor==list.size()){
    return false;
   }
   return true;
  }
  public T next() {
   T obj = null;
   if(this.hasNext()){
    obj = this.list.get(cursor++);
   }
   return obj;
  }
}

 抽象聚集类:

package designPattern.iterator;

public interface Aggregate<T> {
 public void add(T obj);
 public void remove(T obj);
 public Iterator<T> iterator();
}

 实现聚集类:

package designPattern.iterator;

import java.util.ArrayList;
import java.util.List;

public class ConcreteAggregate <T>implements Aggregate<T>{
 private List <T>list = new ArrayList<T>();
 public void add(T obj) {
   list.add(obj);
 }

 public Iterator<T> iterator() {
     return new ConcreteIterator<T>(list);
 }

 public void remove(Object obj) {
     list.remove(obj);
 }
}

 测试类:

package designPattern.iterator;

public class Client {

 public static void main(String[] args){
  Aggregate<String> ag = new ConcreteAggregate<String>();
  ag.add("red");
  ag.add("green");
  ag.add("blue");
  Iterator<String>it = ag.iterator();
  while(it.hasNext()){
     String str = (String)it.next();
     System.out.println(str);
  }
 }

}

上面的代码基本上模拟了迭代器模式的实现,当然java中已经完整的实现了所有集合的迭代。迭代器的作用就是把集合的管理和迭代算法分离,体现了单一职责原则,这也是这个模式的主要作用。

 

 

设计模式系列目录:



JAVA设计模式学习1——统一建模语言UML

JAVA设计模式学习2——面向对象设计原则

JAVA设计模式学习3——设计模式概述

JAVA设计模式学习4——简单工厂模式

JAVA设计模式学习5——工厂方法模式

JAVA设计模式学习6——抽象工厂模式

JAVA设计模式学习7——单例模式

JAVA设计模式学习8——建造模式

JAVA设计模式学习9——原型模式

JAVA设计模式学习10——组合模式

JAVA设计模式学习11——适配器模式

JAVA设计模式学习12——装饰器模式

JAVA设计模式学习13——代理模式

JAVA设计模式学习14——享元模式

JAVA设计模式学习15——门面模式

JAVA设计模式学习16——桥梁模式

JAVA设计模式学习17——策略模式

JAVA设计模式学习18——模版方法模式

JAVA设计模式学习19——观察者模式

JAVA设计模式学习20——责任链模式

JAVA设计模式学习21——命令模式

JAVA设计模式学习22——备忘录模式

JAVA设计模式学习23——状态模式

JAVA设计模式学习24——访问者模式

JAVA设计模式学习25——迭代器模式