zoukankan      html  css  js  c++  java
  • 迭代器模式-Iterator

    一、定义

    迭代器模式,提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

    二、结构

    (1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:

    • next():获取下一个元素的方法
    • hasNext():判断是否遍历结束的方法
    • remove():移出当前对象的方法

    (2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代。

    (3)容器角色(Aggregate):  一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等

    (4)具体容器角色(ConcreteAggregate):就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。

    三、例子

    抽象的集合

    /**
     * 抽象的聚集。(可以理解为Java中的Collection接口)
     */
    public interface Aggregate {
    
        //返回迭代器
        Iterator iterator();
    
    }

    抽象的迭代器

    /**
     * 抽象的迭代器
     */
    public interface Iterator {
    
        //移动到第一个元素
        void first();
    
        //是否还有元素
        boolean hasNext();
    
        //返回下一个元素
        Object next();
    
    }

    具体的集合

    /**
     * 具体的聚集(可以理解为Java中的Collection的实现类)
     */
    public class ConcreteAggregate implements Aggregate {
    
        private Object[] list = {"zhangsan", "lisi", "wangwu", "zhaoliu"};
    
        public Object getElement(int index) {
            if (index < list.length) {
                return list[index];
            }
            //越界
            return null;
        }
    
        public int size() {
            return list.length;
        }
    
        /**
         * 由当前具体的聚集返回迭代器
         */
        @Override
        public Iterator iterator() {
            return new ConcreteIterator(this);
        }
    }

    具体的迭代器

    /**
     * 具体的迭代器
     */
    public class ConcreteIterator implements Iterator {
    
        private ConcreteAggregate concreteAggregate;
        private int index;
        private int size;
    
        public ConcreteIterator(ConcreteAggregate concreteAggregate) {
            this.concreteAggregate = concreteAggregate;
            size = concreteAggregate.size();
            index = 0;
        }
    
        @Override
        public void first() {
            index = 0;
        }
    
        @Override
        public boolean hasNext() {
            return index < size;
        }
    
        @Override
        public Object next() {
            return concreteAggregate.getElement(index++);
        }
    }

    客户端代码

    public class Client {
    
        public static void main(String[] args) {
            Aggregate aggregate = new ConcreteAggregate();
            Iterator iterator = aggregate.iterator();
            while (iterator.hasNext()) {
                Object element = iterator.next();
                System.out.println(element);
            }
        }
    
    }
    
    打印结果:
        zhangsan
        lisi
        wangwu
        zhaoliu
  • 相关阅读:
    Flutter -- iOS导航栏TabBar
    微信小程序布局
    Tomcat for Mac 搭建本地后台服务器 -- 探索Apache Tomcat
    masnory 动态高度
    iPhone 尺度 x xs sr xsmax
    Deepin 安装 tomcat
    Deepin 设置静态 ip
    md 文件 转 pdf
    mac 上关于截图的偏好设置
    MySQL笔记---DDL
  • 原文地址:https://www.cnblogs.com/rouqinglangzi/p/11080083.html
Copyright © 2011-2022 走看看