• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
山高我为峰
博客园    首页    新随笔    联系   管理    订阅  订阅
迭代器模式

迭代器模式定义:
Provide a way to access the elements of an aggregate object sequentially without exposing
its underlying representation.
它提供了一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。
迭代器为容器服务,能容纳对象的所有类型都可以称为容器

迭代器模式角色:
1.Iterator抽象迭代器
抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:first()获得第一个元素;
next()访问下一个元素;idDone()是否已经访问到底部(Java里叫做hasNext()方法)
2.ConcreteIterator具体迭代器
具体迭代器角色要实现迭代器接口,完成容器元素的遍历
3.Aggregate抽象容器
容器角色负责提供创建具体迭代器角色的接口,必然提供一个类似createIterator()这样的方法,在Java
中一般是iterator()方法
4.Concrete Aggregate具体容器
具体容器实现容器接口定义的方法,创建出容纳迭代器的对象

//抽象迭代器
public interface Iterator{
    public Object next();
    public boolean hasNext();
    public boolean remove();
}
//具体迭代器
public class ConcreteIterator implements Iterator{
    private Vector vector=new Vector();
    public int cursor=0;
    @SuppressWarnings(unchecked)
    public ConcreteIterator(Vector _vector){
        this.vector=_vector;
    }
    //判断是否到达尾部
    public boolean hasNext(){
        if(this.cursor==this.vector.size()){
            return false;
        }else{
            return true;
        }
    }
    
    //判断是否到达尾部
    public boolean hasNext(){
        if(this.cursor==this.vector.size()){
            return false;
        }else{
            return true;
        }
    }
    
    //返回下一个元素
    public Object next(){
        Object result=null;
        if(this.hasNext()){
            result=this.vector.get(this.cursor++);
        }else{
            result=null;
        }
        return result;
    }
    //删除当前元素
    public boolean remove(){
        this.vector=.remove(this.vector);
        return true;
    }
}

//抽象容器
public interface Aggregate{
    public void add(Object object);
    public void remove(Object object);
    public Iterator iterator();
}
//具体容器
public class ConcreteAggrate implements Aggragate{
    private Vector vector=new Vector();
    public void add(Object object){
        this.vector.add(object);
    }
    public Iterator iterator(){
        return new ConcreteIterator(this.vector);
    }
    public void remove(Object object){
        this.remove(object);
    }
}
//场景类
public class Client{
    public static void main(String[] args){
        Aggregate agg=new ConcreteAggregrate();
        agg.add("abc");
        agg.add("defc");
        agg.add("qqqq");
        Iterator iterator=agg.iteragor();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

 

posted on 2016-05-13 15:12  山高我为峰  阅读(298)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3