阅读 103

迭代器模式

前言

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

目录

一、定义

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

二、模式原理分析

模板代码

 //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());
        }
    }
}
复制代码

三、使用场景

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

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

四、优点

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

  • 满足开闭原则,当需要对新的对象集合进行扩展时,只需要新增具体的对象迭代器和具体的集合类就可以

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

五、缺点

  • 增加了子类数量

  • 增加了系统复杂性

文章分类
Android