迭代器模式
迭代器模式(Iterator):在不暴露对象内部结构的同时,可以顺序地访问聚合对象内部的元素。
迭代器是用来顺序的访问一个聚合对象内部的元素的,可以简化我们遍历操作。
例如以一个轮播图为例,图片元素对象就是一组聚合对象,创建一个迭代器来专门处理这些图片数据。
var Iterator = function(item,container){
var container = container && document.getElementById(container) || document;
var items = container.getElementsByTagName(items);
var length = items.length;
var index = 0;
var splice = [].splice;
return {
//获取第一个元素
first : function(){
index = 0;
return items[index];
},
//获取最后一个元素
second : function(){
index = length - 1;
return items[index];
},
//获取前一个元素
pre : function(){
if(--index>0){
return items[index];
}else{
index = 0;
return null
}
},
//获取后一个元素
next : function(){
if(++index<length){
return items[index];
}else{
index = 0;
return null;
}
},
//获取某一个元素
get : function(num){
index = num>=0 ? num%length : num%length + length;
},
//对每一个元素执行某一个方法
dealEach : function(fn){
var args = splice.call(arguments,1)
for(var i=0;i<length;i++){
fn.apply(items[i],args);
}
},
//对某一个元素执行某一个方法
dealItem : function(num,fn){
fn.apply(this.get(num),splice.call(arguments,2))
},
//排它方式处理某一个元素
exclusive : function(num,allFn,numFn){
this.dealEach(allFn);
if(Object.prototype.toString.call(num) === "[object Array]"){
for(var i=0,len=num.length;i<len;i++){
this.dealItem(num[i],numFn);
}
}else{
this.dealItem(num,numFn);
}
}
}
}有了迭代器,在创建任何焦点图类,只需要使用迭代器中的创建的内部数据对象即可,想要只处理某一张图片只需要调用迭代器提供的接口方法即可。
设计模式 文章被收录于专栏
设计模式
