您的位置 首页 java

设计模式:迭代器模式

什么是 迭代器 模式?


一句话归纳

流水线上坐一天,每个包裹扫一遍。

代码示例

java从1.2的版本中开始,就新增了一个java.util. Iterator <E>的接口,并且把Iterator应用到Collection接口中。在15的版本中引入了一个java.lang.Iterable<T>接口,有很多容器接口实现它,比如:List<E>、Set<E>、TreeSet<E>、Queue<E>等等,又有多少个容器类实现它,比如:ArrayList<E>、ArrayBlockingQueue<E>、CopyOnWriteArrayList<E>等等。迭代器模式已经融入到 java 当中了,让我们可以使用的如此轻松、方便。

 public interface Iterator<E> {
     boolean  hasNext();
    E  next();
    E remove();
}

interface Iterable<T> {
    Iterator<T> iterator();
}

class ConcreteIterable<T> implements  Iterable<T> {
    @ Override 
    public Iterator iterator() { return new ConcreteIterator(new ArrayList<T>()); }

    class ConcreteIterator<T> implements Iterator<T> {
        int cursor;
        ArrayList<T> elementData;

        public ConcreteIterator(ArrayList<T> elementData) { this.elementData = elementData; }

        @Override
        public boolean hasNext() {
            if (cursor == elementData.size()) {
                return false;
            }
            return true;
        }

        @Override
        public T next() {
            if (cursor < this.elementData.size()) {
                return elementData.get(cursor++);
            }
            return null;
        }

        @Override
        public T remove() { return this.elementData.remove(cursor); }
    }
}  

在程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将 链表 的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历方法由用户自己实现是否可行呢?答案是同样不可取,因为会存在两个缺点:暴露了聚合类的内部表示,使其数据不安全;增加了客户的负担。“迭代器模式”能较好地克服以上缺点,它在客户访问类与聚合类之间插入一个迭代器,这分离了聚合对象与其遍历行为,对客户也隐藏了其内部细节,且满足“ 单一职责原则 ”和“开闭原则”.


写在最后

好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。

文章来源:智云一二三科技

文章标题:设计模式:迭代器模式

文章地址:https://www.zhihuclub.com/186833.shtml

关于作者: 智云科技

热门文章

网站地图