码迷,mamicode.com
首页 > 其他好文 > 详细

迭代器模式

时间:2017-03-11 23:11:15      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:抽象方法   应该   one   --   设计   过程   抽象   UI   简单   

Iterator:我们先来看一下这个接口,实际上的抽象方法就2个,hasNext和next

package java.util;

import java.util.function.Consumer;

public interface Iterator<E> {
    boolean hasNext();
    E next();
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

 

1、hasNext是用于判断是否有下一个元素,看到这个方法,大家应该也知道Iterator接口是用于什么样的数据了--集合|数组类型

2、next是用于获取下一个元素的方法

 

这两个方法组成了这样的调用方式:

while(iterator.hasNext()) {
  Object one = iterator.next();
  one.action();
}

 

它不像js中的调用方式

$("a").each(function(obj) {
  obj.action();
})

js采用的是传入回调函数,通过调用回调函数的方式来遍历集合执行动作

 

所以我们把js的这种方式称为:内部迭代器

 

特点也很明显

 

内部迭代器需要集合支持传入回调函数

 

而且无法在操作的过程中直接中断操作等

 

并且会引入闭包问题,即在内部迭代器中调用当前上下文变量的问题

 

所以在使用中,倾向于灵活的外部遍历,或者倾向于简单的内部遍历,见仁见智

 

迭代器的设计意图经过上述的例子,也比较清晰了

 

使得不同的集合类型,可以用相同的方式来遍历

 

迭代器模式

标签:抽象方法   应该   one   --   设计   过程   抽象   UI   简单   

原文地址:http://www.cnblogs.com/gabin/p/6536446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!