Java 迭代器模式

迭代器模式的作用:

       提供一种方法顺序访问一个聚合对象中的各个元素,而又无须暴露该对象的内部表示。

迭代器模式优点:

      1.支持以不同的方式遍历一个聚合对象。

      2.在迭代器模式中,增加新的聚合类和迭代器类都很方便。

迭代器模式缺点:

     1.增加新的聚合类需要对应的增加新的迭代器类,类的个数成对增加,增加系统的复杂性。

迭代器模式角色:

     1.抽象迭代器角色:一般来说,它是一个抽象类或者一个接口,它抽象出遍历元素所需要的方法。

      2.具体迭代器角色:它实现抽象迭代器角色里方法,它是抽象迭代器角色的具体化。

      3.抽象容器角色:一般来说,它是一个抽象类或者一个接口,它抽象出容器操作需要的方法。

      4.具体容器角色:它实现抽象容器角色里方法,它是抽象容器角色的具体化。

 

/**
 * 抽象迭代器角色
 * Created by Administrator
 */
public interface Iterator {
    void first();
    void next();
    boolean hasNex();
    Boolean isFirst();
    Boolean  isLast();
    Object getCurrentObject();
}

 

/**
 * 具体迭代器角色
 * Created by Administrator
 */

public class ConcreteIterator implements Iterator{

    private List<Object> list;

    public ConcreteIterator(List<Object> list) {
        this.list = list;
    }

    private  int index;
    @Override
    public void first() {
        index=0;
    }

    @Override
    public void next() {
      if(index<list.size()){
          index++;
      }
    }

    @Override
    public boolean hasNex() {
        if(index<list.size()){
            return true;
        }else {
            return false;
        }
    }

    @Override
    public Boolean isFirst() {
        return index==0?true:false;
    }

    @Override
    public Boolean isLast() {
        return index==(list.size()-1)?true:false;
    }

    @Override
    public Object getCurrentObject() {
        return list.get(index);
    }
}
/**
 * 抽象容器角色
 * Created by Administrator
 */
public interface Container {
    public void addObject(Object o);
    public Object get(int index);
    public Iterator iterator();
    public int getSize();

}
/**
 * 具体容器角色
 * Created by Administrator
 */

public class ConcreteContainer  implements Container{
    private List<Object> list;


    public ConcreteContainer() {
        list=new ArrayList<Object>();
    }

    @Override
    public void addObject(Object o) {
       list.add(o);
    }

    @Override
    public Object get(int index) {
        if(index<list.size()){
            return list.get(index);
        }else{
            return null;
        }
    }

    @Override
    public Iterator iterator() {
        return new ConcreteIterator(this.list);
    }

    @Override
    public int getSize() {
        return list.size();
    }
}

 

//调用
ConcreteContainer concreteContainer=new ConcreteContainer();
concreteContainer.addObject("郑秀晶");
concreteContainer.addObject("林允儿");
concreteContainer.addObject("迪丽热巴");

//遍历
Iterator iterator=concreteContainer.iterator();
while (iterator.hasNex()){
    Log.d("Iterator","可爱漂亮的妹子:"+iterator.getCurrentObject());
    iterator.next();
}

结果:

  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值