场景:
提供一个可以遍历对象的方式,又称为:游标cursor模式
聚合对象:存储数据
迭代器:遍历数据
interface MyIterator{ void first();//将游标指向第一个元素 void next(); //将游标指向下一个元素 boolean hasNext();//判断是否存在下一个元素 boolean isFirst(); boolean isLast();
Object getCurrentObj();//获取当前游标指向的对象 } //自定义聚合类 class ConcreteMyAggregate{ private List<Object>list = new ArrayList<Object>(); publicvoid addObject(Object object){ this.list.add(object); } publicvoid removeObject(Object object){ this.list.remove(object); } public List<Object> getList() { returnlist; } publicvoid setList(List<Object> list) { this.list = list; } //获得迭代器的方法 public MyIterator createIterator(){ returnnew ConcreteIterator(); } //使用内部类定义迭代器,可以直接使用外部类的属性 privateclass ConcreteIterator implements MyIterator{ privateintcursor;//定义游标用于记录遍历时的位置 @Override publicvoid first() { cursor = 0; } publicvoid next() { if(cursor<list.size()){ cursor++; } } publicboolean hasNext() { if(cursor<list.size()){ returntrue; } returnfalse; } publicboolean isFirst() { returncursor==0?true:false; } publicboolean isLast() { returncursor==(list.size()-1)?true:false; } public Object getCurrentObj() { returnlist.get(cursor); } } } publicstaticvoid 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(); } } |