迭代器模式

前言

迭代器模式也称游标模式,在绝大多数编程语言中,迭代器已经成为一个基础的类库,直接用来遍历集合对象。关键思想是将访问和遍历的职责从集合对象中分离出来,放入标准的协议对象中。算法

目录

1、定义

它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。编程

2、模式原理分析

模板代码markdown

//1.抽象迭代器
public interface Iterator{
    //遍历到下一个元素
    public Object next();
    //是否已经遍历到尾部
    public boolean hasNext();
    //删除当前指向的元素
    public boolean remove();
}
//2.具体迭代器
public class ConcreteIterator implements Iterator{
    private Vector vector = new Vector();
    //定义当前游标
    public int cursor = 0;
    public ConcreteIterator(Vector _vector){
        this.vector = _vector;
    }
    //判断是否到达尾部
    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.cursor);
        return true;
    }
}
//3.抽象容器
public interface Aggregate{
    //是容器必然有元素的增长
    public void add(Object object);
    //减小元素
    public void remove(Object object);
    //由迭代器来遍历全部的元素
    public Iterator iterator();
}
//4.具体容器
public class ConcreteAggregate implements Aggregate{
    //容纳对象的容器
    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.vector.remvoe(object);
    }
}
//5.场景类
public class Client{
    public static void main(String[] args){
        //容器
        Aggregate agg = new ConcreteAggregate();
        //添加数据
        agg.add("abc");
        agg.add("aaa");
        agg.add("1234");
        //遍历
        Iterator iterator = agg.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}
复制代码

3、使用场景

  • 对客户端隐藏其遍历算法复杂性时编程语言

  • 须要简化重复的循环遍历逻辑时this

4、优势

  • 知足单一职责原则,将遍历算法代码统一抽取封装为独立的类,职责仅仅是遍历数据spa

  • 知足开闭原则,当须要对新的对象集合进行扩展时,只须要新增具体的对象迭代器和具体的集合类就能够code

  • 避免了直接使用for循环的重复代码问题orm

5、缺点

  • 增长了子类数量对象

  • 增长了系统复杂性rem

相关文章
相关标签/搜索