设计模式之迭代器模式

来源:互联网 发布:淘宝网骆驼男鞋休闲鞋 编辑:程序博客网 时间:2024/05/18 17:45

        迭代器模式也叫游标模式,提供一种方法可以访问逐一访问容器里面的每个对象,又不暴露各个对象的内部细节。

        迭代器模式分为下面几个角色:

  • 迭代器角色:定义访问和遍历容器内元素的接口;
  • 具体迭代器:迭代器角色的具体实现,并保存迭代器中的位置;
  • 聚集角色:给出创建迭代器对象的接口;
  • 具体聚集角色:聚集角色的实现,并返回一个迭代器对象的实例。
迭代器角色:
public interface Iterator {public Object first();public Object next();public Object currentObject();}
具体迭代器角色:
public class ConcreteIterator implements Iterator {public ConcreteAggregate soldier;public int currentItem = -1;public ConcreteIterator(ConcreteAggregate soldier) {super();this.soldier = soldier;}@Overridepublic Object first() {if(soldier.lists.size() > 0) {return soldier.lists.get(0);}return null;}@Overridepublic Object next() {if(currentItem < soldier.lists.size() - 1) {currentItem++;if(currentItem > soldier.lists.size() - 1) {currentItem = 0;}return soldier.lists.get(currentItem);}return null;}@Overridepublic Object currentObject() {return soldier.lists.get(currentItem);}}
聚集角色:
public abstract class Aggregate {public abstract Iterator createIterator();}
具体聚集角色:
public class ConcreteAggregate extends Aggregate {public List<String> lists = new ArrayList<String>();@Overridepublic Iterator createIterator() {return new ConcreteIterator(this);}public void addObject(String str) {lists.add(str);}}
测试:
public static void main(String[] args) {ConcreteAggregate concreteAggregate = new ConcreteAggregate();concreteAggregate.addObject("1");concreteAggregate.addObject("2");concreteAggregate.addObject("3");concreteAggregate.addObject("4");concreteAggregate.addObject("5");Iterator iterator = concreteAggregate.createIterator();System.out.println(iterator.first());System.out.println("------");for(int i = 0; i < concreteAggregate.lists.size(); i++) {System.out.println(iterator.next());}System.out.println("------");System.out.println(iterator.currentObject());}

0 0