设计模式学习(五)

4.迭代器模式

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

迭代器模式无非就是循环访问聚合对象中的各个元素。比如 jQuery 中的$.each 函数

$.each( [1, 2, 3], function( i, n ){ 
	 console.log( '当前下标为: '+ i ); 
	 console.log( '当前值为:' + n ); 
}); 

var Iterator = function( obj ){ 
	var current = 0; 
	var next = function(){ 
		current += 1; 
	}; 
	var isDone = function(){ 
		return current >= obj.length; 
	}; 
	var getCurrItem = function(){ 
		return obj[ current ]; 
	}; 
	return { 
		next: next, 
		isDone: isDone, 
		getCurrItem: getCurrItem 
	} 
}; 
var compare = function( iterator1, iterator2 ){ 
	while( !iterator1.isDone() && !iterator2.isDone() ){ 
		if ( iterator1.getCurrItem() !== iterator2.getCurrItem() ){ 
			throw new Error ( 'iterator1 和 iterator2 不相等' ); 
		} 
		iterator1.next(); 
		iterator2.next(); 
	} 
	alert ( 'iterator1 和 iterator2 相等' ); 
} 
var iterator1 = Iterator( [ 1, 2, 3 ] ); 
var iterator2 = Iterator( [ 1, 2, 3 ] ); 
compare( iterator1, iterator2 ); // 输出:iterator1 和 iterator2 相等 


// 迭代器模式应用在上传功能
var getActiveUploadObj = function(){ 
	try{ 
 return new ActiveXObject( "TXFTNActiveX.FTNUpload" ); // IE 上传控件
}catch(e){ 
	return false; 
} 
}; 
var getFlashUploadObj = function(){ 
 if ( supportFlash() ){ // supportFlash 函数未提供
 	var str = '<object type="application/x-shockwave-flash"></object>'; 
 	return $( str ).appendTo( $('body') ); 
 } 
 return false; 
}; 
var getFormUpladObj = function(){ 
 var str = '<input name="file" type="file" class="ui-file"/>'; // 表单上传
 return $( str ).appendTo( $('body') ); 
}; 
var getWebkitUploadObj = function(){ 
 // 具体代码略
}; 
var getHtml5UploadObj = function(){ 
 // 具体代码略
}; 

var iteratorUploadObj = function(){ 
	for ( var i = 0, fn; fn = arguments[ i++ ]; ){ 
		var uploadObj = fn(); 
		if ( uploadObj !== false ){ 
			return uploadObj; 
		} 
	} 
}; 
var uploadObj = iteratorUploadObj( getActiveUploadObj, getFlashUploadObj, getFormUpladObj,getHtml5UploadObj,  getWebkitUploadObj ); 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值