D
D
Design Patterns
Github
Search…
D
D
Design Patterns
设计模式
关于 JavaScript
单例模式
工厂模式
策略模式
代理模式
迭代器模式
订阅-发布模式
命令模式
组合模式
模板方法模式
享元模式
职责链模式
中介者模式
装饰者模式
状态模式
适配器模式
设计模式原则
Powered By
GitBook
迭代器模式
迭代器模式「Iterator Pattern」:是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素
模式动机
一个聚合对象,如一个列表或者一个集合,
应该提供一种方法来让别人可以访问它的元素,而又不需要暴露它的内部结构
。 针对不同的需要,可能还要以不同的方式遍历整个聚合对象,但是我们并不希望在聚合对象的抽象层接口中充斥着各种不同遍历的操作。
怎样遍历一个聚合对象,又不需要了解聚合对象的内部结构,还能够提供多种不同的遍历方式,这就是迭代器模式所要解决的问题
实现
内部迭代器
1
const
each
=
function
(
arg
,
callback
)
{
2
for
(
let
i
=
0
;
i
<
arg
.
length
;
i
++
)
{
3
callback
(
i
,
arg
[
i
])
4
}
5
}
6
7
each
([
1
,
2
,
3
],
(
index
,
value
)
=>
{
8
console
.
info
(
index
,
value
)
9
})
10
11
/*打印结果
12
0 1
13
1 2
14
2 3*/
Copied!
外部迭代器
1
const
Iterator
=
function
(
obj
)
{
2
let
currentIndex
=
0
3
4
const
next
=
function
()
{
5
currentIndex
++
6
}
7
8
const
done
=
function
()
{
9
return
currentIndex
>=
obj
.
length
10
}
11
12
const
getCurrentItem
=
function
()
{
13
return
obj
[
currentIndex
]
14
}
15
16
return
{
17
next
,
18
done
,
19
getCurrentItem
20
}
21
}
Copied!
内部迭代器已经在内部定义好了迭代规则,只需要一次调用即可。外部迭代器的虽然增加一点调用的复杂度,但是我们可以手工控制迭代的过程和顺序。
小结
迭代器模式是一种相对简单的模式,简单到很多时候我们都不认为它是一种设计模式。目前的绝大部分语言都内置了迭代器
Previous
代理模式
Next
订阅-发布模式
Last modified
2yr ago
Copy link
Contents
模式动机
实现
内部迭代器
外部迭代器
小结