javascript设计模式8代理模式

代理模式是非常常用的一种模式,顾名思义,为两个对象之间添加一层代理,通过代理访问想要访问的对象,而不是直接去访问或修改。

虚拟代理

//图片预加载代理
var myImg= (function(){
	var imgnode = document.createElement('img')
	document.body.appendChild(imgnode)
	return {
		setSrc : function(src){
			imgnode.src = src;
		}
	}
})()

var proxyImg = (function(){
	var img = new Image;
	img.onload = function(){
		myImg.setSrc(this.src)
	}
	return {
		setSrc: function(src){
			myImg.setSrc('file:// /c:/user/loading.gif')
			img.src = src;
		}
	}
})()

proxyImg.setSrc('http:// qq.com/photo.jpg')

  

缓存代理

var mult = funcion(){
	var a = 1;
	for(var i = 0 , l = arguments.length; i < l ;i++){
		a = a* arguments[i];
	}
	return a;
}

var proxyMult = (function(){
	var cache = {}
	return function(){
		var args = Array.prototype.join.call(arguments,',')
		if(args in cache){
			return cache[args]
		}
		return cache[args] = mult.apply(this,arguments)
	}
})()

proxyMult(1,2,4

  使用高阶函数动态创建代理

var mult = funcion(){
	var a = 1;
	for(var i = 0 , l = arguments.length; i < l ;i++){
		a = a* arguments[i];
	}
	return a;
}

var createProxyFactory = function(fn){
	var cache = {}
	return function(){
		var args = Array.prototype.join.call(arguments,',')
		if(args in cache){
			return cache[args]
		}
		return cache[args] = fn.apply(this,arguments)
	}
}

var proxyMult = createProxyFactory(mult)
proxyMult(1,3,4)

  

posted @ 2016-02-18 12:08  倾其一生  阅读(91)  评论(0编辑  收藏  举报