迭代器模式(Iterator)

场景:

提供一个可以遍历对象的方式,又称为:游标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();

      }

   }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值