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

    一、模式名

    迭代器, Iterator

    二、解决的问题

    迭代器主要用于按照某种顺序遍历访问某个集合,提出的目的是为了解耦对集合遍历过程和集合对象。访问集合的方法有很多,使用迭代器可以自定义遍历集合元素的方法,每当新增一种访问方法时,不需要修改集合类,只需新增新的访问集合的迭代类,保证了开闭原则。

    三、解决方案

    迭代器的UML如下图所示

    clipboard

    代码如下

    interface Collection<E> {
        void add(E e);
        E get(int i);
        int size();
        Iterator iterator();
    }
    
    class ConcreteCollection<E> implements Collection<E> {
    
        private Object[] eles;
        private int currentIndex;
    
        public ConcreteCollection(int length) {
            eles = new Object[length];
            currentIndex = 0;
        }
    
        @Override
        public void add(E e) {
            if (currentIndex < eles.length) {
                eles[currentIndex++] = e;
                return;
            }
    
            System.out.println("超过数组长度");
        }
    
        @Override
        public E get(int i) {
            if (i < 0 || i >= eles.length) {
                return null;
            }
    
            return (E) eles[i];
        }
    
        @Override
        public int size() {
            return currentIndex;
        }
    
        @Override
        public Iterator iterator() {
            return new ConcreteIterator(this);
        }
    }
    
    
    interface Iterator<E> {
        E next();
        boolean hasNext();
    }
    
    class ConcreteIterator<E> implements Iterator<E> {
    
        private Collection<E> collection;
        private int cursor;
    
        public ConcreteIterator(Collection<E> collection) {
            this.collection = collection;
            cursor = 0;
        }
    
        @Override
        public E next() {
            if (hasNext()) {
                return collection.get(cursor++);
            }
    
            return null;
        }
    
        @Override
        public boolean hasNext() {
            return cursor < collection.size();
        }
    }
    
    
    public class IteratorClient {
        public static void main(String[] args) {
            Collection<String> collection = new ConcreteCollection<>(10);
    
            for (int i = 0; i < 10; ++i) {
                collection.add(i + "");
            }
    
            Iterator<String> concreteIterator = new ConcreteIterator<>(collection);
    
            while (concreteIterator.hasNext()) {
                String next = concreteIterator.next();
                System.out.println(next);
            }
        }
    }

    如果后续我们需要对集合增加新的遍历方法,只需要实现对该集合的迭代器即可,不需要修改原有集合类。

    应用场景:

    Java 集合类中每个具体的集合都有对应的迭代器

  • 相关阅读:
    教育单元测试mock框架优化之路(下)
    教育单元测试mock框架优化之路(中)
    教育单元测试mock框架优化之路(上)
    spring /spring boot中mock
    Multi-Projector Based Display Code ------- Home
    投影的一些链接
    香茅油:不只是驱虫剂 new
    python特定时间发送消息到微信公众号
    基金定投研究
    PE就是市盈率的缩写 PB是平均市净率的缩写
  • 原文地址:https://www.cnblogs.com/glsy/p/11048780.html
Copyright © 2011-2022 走看看