• 迭代器模式-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
  • 相关阅读:
    PHP与Web页面的交互
    PHP数组和数据结构(下)未完。。。。
    PHP数组和数据结构(上)
    网络
    单列模式(饿汉模式和懒汉模式)
    C++动态内存管理
    基础I/O
    进程程序替换(自主实现shell)
    进程控制
    调研task_struct结构体
  • 原文地址:https://www.cnblogs.com/rouqinglangzi/p/11080083.html
Copyright © 2020-2023  润新知