设计模式之迭代器模式 Iterator
Posted 大白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之迭代器模式 Iterator相关的知识,希望对你有一定的参考价值。
代码实现
public interface MyIterator { void first(); //将游标指向第一个元素 void next(); //将游标指向下一个元素 boolean hasNext(); //判断是否存在下一个元素 boolean isFirst(); boolean isLast(); Object getCurrentObj(); //获取当前游标指向的对象 }
/** * 自定义聚合类 * @author bzhx * 2017年3月14日 */ public class ConcreteMyAggregate { private List<Object> list = new ArrayList<Object>(); public List<Object> getList() { return list; } public void setList(List<Object> list) { this.list = list; } public void addObject(Object obj){ this.list.add(obj); } public void removeObject(Object obj){ this.list.remove(obj); } //获得迭代器 public MyIterator createIterator(){ return new ConcreteIterator(); } //使用内部类定义迭代器,可以直接使用外部类的属性 public class ConcreteIterator implements MyIterator{ private int cursor; //定义游标用于记录遍历时的位置 @Override public void first() { cursor = 0; } @Override public void next() { if(cursor<list.size()){ cursor++; } } @Override public boolean hasNext() { if(cursor<list.size()){ return true; } return false; } @Override public boolean isFirst() { return cursor==0?true:false; } @Override public boolean isLast() { return cursor==(list.size()-1)?true:false; } @Override public Object getCurrentObj() { return list.get(cursor); } } }
public class Client { public static void main(String[] args) { ConcreteMyAggregate cma = new ConcreteMyAggregate(); cma.addObject("aa"); cma.addObject("bb"); cma.addObject("cc"); MyIterator iter = cma.createIterator(); while (iter.hasNext()) { System.out.println(iter.getCurrentObj()); iter.next(); } } }
以上是关于设计模式之迭代器模式 Iterator的主要内容,如果未能解决你的问题,请参考以下文章
JAVA SCRIPT设计模式--行为型--设计模式之Iterator迭代器模式(16)