15-迭代器模式

迭代器模式

一、定义

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

迭代器模式(Iterator Pattern)目前已经是一个没落的模式,基本上没人会单独写一个迭代器,除非是产品性质的开发

迭代器的通用类图
在这里插入图片描述
Iterator是抽象迭代器,负责定义访问和遍历元素的接口; ConcreteIterator是具体迭代器,要实现迭代器接口,完成容器元素的遍历;Aggregate是抽象容器,负责提供创建具体迭代器角色的接口,必然提供一个类似createIterator()这样的方法,在Java中一般是iterator()方法;Concrete Aggregate是具体容器,具体容器实现容器接口定义的方法,创建出容纳迭代器的对象。

迭代器的通用源码

  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;
        
        @SuppressWarnings("unchecked")
        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.remove(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());
            }
        }
    }
    

注意:现在基本上很少有项目再独立写迭代器了,它已经成为一个最基础的工具,已经融入到各个语言和工具中了,基本上不用自己动手写迭代器了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值