迭代器模式

来源:互联网 发布:飞思卡尔单片机课程 编辑:程序博客网 时间:2024/06/03 19:16

场景:提供一种可以遍历聚合对象的方式,又称为cursor模式

          聚合对象:存储数据

          迭代器:遍历数据

MyIterator.java(自定义迭代器接口)

public interface MyIterator {void first();//将游标指向第一个元素void next();//将游标指向下一个元素boolean hasNext();//判断是否存在下一个元素boolean isFirst();boolean isLast();Object getCurrentObj();  //获取当前游标指向的对象}


ConcreteMyAggregate.java(自定义聚合类)

public class ConcreteMyAggregate {private List<Object> list = new ArrayList<Object>();public void addObject(Object obj){this.list.add(obj);}public void removeObject(Object obj){this.list.remove(obj);}public List<Object> getList() {return list;}public void setList(List<Object> list) {this.list = list;}//获得迭代器public MyIterator  createIterator(){return new ConcreteIterator();}//使用内部类定义迭代器,可以直接使用外部类的属性private class ConcreteIterator implements MyIterator {private int cursor;  //定义游标用于记录遍历时的位置@Overridepublic void first() {cursor = 0;}@Overridepublic Object getCurrentObj() {return list.get(cursor);}@Overridepublic boolean hasNext() {if(cursor<list.size()){return true;}return false;}@Overridepublic boolean isFirst() {return cursor==0?true:false;}@Overridepublic boolean isLast() {return cursor==(list.size()-1)?true:false;}@Overridepublic void next() {if(cursor<list.size()){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();}}}

简单的说,就是一个类里面有集合属性,在里面创建一个迭代器,调用迭代器里面的方法,其实就是调用集合的方法,然后就把类中数据遍历出来了!

原创粉丝点击