5.设计模式(迭代器模式)

2020-11-09  本文已影响0人  悠哈121

1.迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示,迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以顺序访问其中的每个元素

代码实现(1.内部迭代器)
迭代函数内部定义好了迭代规则,它完全接手整个迭代过程,外部只需要一次初始调用。内部迭代器在调用的时候非常方便,但这也刚好是内部迭代器的缺点,因为内部迭代器的迭代规则已经被提前规定。
//比如实现判断两个数组是否相等 each函数无法同时迭代两个数组
function each(arr,fun){
  for(let i =0; i < arr.length;i++){
    fun(i,arr[i])
  }
}
each([1,2,3],(index,item)=>{ 
  console.log(index,item)
})
//比较两个函数是否相等
function compare(arr1,arr2){
  if(arr1.length !== arr2.length){
    throw new Error ( '不等' );
  }
  each(arr1,(index,item)=>{
    if(item !== arr2[index]){
      throw new Error ( '不等' );
    }
  })
  console.log("相等")
}
compare([1,2,3],[1,2,2])

代码实现(2.外部迭代器)
//外部迭代器必须显式的请求迭代下一个元素,外部迭代器增加了一些调用的复杂度,但相对也增强了迭代器的灵活性,我们可以手工控制迭代的过程或者顺序
var compare = function( iterator1, iterator2 ){ 
 while( !iterator1.isDone() && !iterator2.isDone() ){ 
 if ( iterator1.getCurrItem() !== iterator2.getCurrItem() ){ 
 throw new Error ( 'iterator1 和 iterator2 不相等' ); 
 } 
 iterator1.next(); 
 iterator2.next(); 
 } 
 console.log( 'iterator1 和 iterator2 相等' ); 
} 
var iterator1 = Iterator( [ 1, 2, 3 ] ); 
var iterator2 = Iterator( [ 1, 2, 3 ] ); 
compare( iterator1, iterator2 ); // 输出:iterator1 和 iterator2 相等
上一篇 下一篇

猜你喜欢

热点阅读