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 集合类中每个具体的集合都有对应的迭代器

  • 相关阅读:
    6.12
    20121006晴
    6.11
    测试利器IL级别的Debug工具“Deblector1.1.1修改版”
    Windows Phone开发经验谈(15)动态的改变APP的字体大小
    windows8开发直播windows8商店开发者帐号注册过程(完)
    Windows Phone开发经验谈(13)华为网盘直链API调用
    windows8开发App审核折腾记
    Asp.net开发经验利用Aspose.Words按模板导出Word
    Windows Phone开发经验谈(17)两则改善用户体验的开发技巧
  • 原文地址:https://www.cnblogs.com/glsy/p/11048780.html
Copyright © 2011-2022 走看看