设计模式之代理模式

代理模式:

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

模式作用:

  1. 远程代理(一个对象将不同空间的对象进行局部代理)
  2. 虚拟代理(根据需要创建开销很大的对象如渲染网页暂时用占位图代替真图)
  3. 安全代理(控制真实对象的访问权限)
  4. 智能指引(调用对象代理处理另外一些事情如垃圾回收机制)

注意事项:

  1. 不能滥用代理,有时候仅仅是给代码增加复杂度

例子1:

//代理模式需要3方
//1.买家
function maijia(name){
    this.name=name;
}
// 2.中介 卖房
function zhongjie(){
}
zhongjie.prototype.maifang=function(){
    new fangdong(new maijia("小明")).maifang('20万');
}
// 3.房东 坐等收钱
function fangdong(maijia){
    this.maijia_name=maijia.name;
    this.maifang=function(money){
        console.log("收到了来自["+this.maijia_name+"]"+money+"人民币");
    }
}
(new zhongjie).maifang();//收到了来自[小明]20万人民币

例子2:

虚拟代理实现图片预加载

虚拟代理是把一些开销很大的对象,延迟到真正需要到它的时候才去创建
在web开发中,图片预加载是一种常用的技术,如果直接给某个img标签节点设置src属性,由于图片过大或者网络不佳,图片的往往有段时间会是一片空白.常用的做法是先用一张loading图片占位,然后用异步的方式加载图片,等图片加在好了再把它填充到img节点了,这种场景就很适合使用虚拟代理

var myImage=(function(){
    var imgNode=new Image();
    document.body.appendChild(imgNode);
    return {
        setSrc:function(src){
            imgNode.src=src;
        }
    }
})()

var proxyImage=(function(){
    var img=new Image();
    img.onload=function(){
        myImage.setSrc(this.src);
    }
    return {
        setSrc:function(src){
            myImage.setSrc('loading.gif');
            img.src=src;
        }
    }
})()
proxyImage.setSrc("http://www.baidu.com/img/bdlogo.png")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 代理是一个对象,它可以用来控制对本体对象的访问,它与本体对象实现了同样的接口,代理对象会把所有的调用方法传递给本体...
    JSUED阅读 312评论 0 0
  • 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。 代理模式的关键是,当客户不方便直接访问一个对象或...
    风铭阅读 1,567评论 0 0
  • 在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对...
    李序锴阅读 416评论 0 2
  • 要解决的问题 代理模式主要解决的问题是将复杂的操作逻辑隐藏起来,让方法的使用者只使用几个固定的set和get类方法...
    璀璨天宇阅读 218评论 0 1
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,854评论 2 17