zoukankan      html  css  js  c++  java
  • js设计模式(9)---代理模式

    0.前言                                                                

       KG、PP被交易到了布鲁克林篮网,我的心情很复杂,一方面为他们不能终老celtics感到惋惜,另一方面为他们能够再次冲击总冠军感到高兴。从07年以来,作为一个铁杆celtics球迷,他们给我带来很多喜怒哀乐,也记载我的青春,不过这一切都会成为历史。

    1.代理模式是什么                                                 

       1.1、代理(proxy)是一个对象,它可以用来控制对另外一个对象的访问;

       1.2、代理对象和本体对象实现了同样的接口,并且会把任何方法调用传递给本体对象;

    2、应用

       2.1、远程代理

        代理可以代理本体对象被实例化,并使其可被远程访问。这一个应用自己不是很熟悉,暂时搁置。

       2.2、虚拟代理

       这是代理用于最多的一种情况。可以将本地的实例化推迟到真正需要的时候,对于实例化比较占用资源的本体,显得非常有用。  

    //本人较懒,把大叔的例子借用过来,进行了修改来说明虚拟代理如何使用,希望大叔别打我
    //
    先声明美女对象 var girl = function (name) { this.name = name; }; // 这是dudu var dudu = function (girl) { this.girl = girl; this.sendGift = function (gift) { alert("Hi " + girl.name + ", dudu送你一个礼物:" + gift); } }; // 大叔是代理 var proxyTom = function (girl) { this.girl = girl; this.du = null; this._initialize = function(){ if(this.du === null){ this.du = new dude(this.girl) } } this.sendGift = function (gift) { this._initialize(); this.du.sendGift(gift); } };

    //调用代理对象
    var proxy = new proxyTom(new girl("酸奶小妹"));
    proxy.sendGift("999朵玫瑰");
     

    3.与装饰者模式的区别                                           

       相同之处:都要对其他对象进行包装,都要事先与被包装对象相同的接口,而且都要把方法调用传递给被包装的对象。

       不同之处:一是装饰者会对被包装对象的功能进行修改或扩充,但是代理只不过是控制对它的访问;二是被包装对象的创建方式上:装饰者模式被包装对象的实例化过程完全是独立的,而在代理模式中,被包装对象的实例化是代理的实例化过程的一部分。

    4.个人理解总结                                                    

       1.代理模式是用来对对象进行控制;

       2.代理对象和本体对象实现了相同的接口;

       3.代理模式主要应用是虚拟代理、远程代理

       4.虚拟代理主要面向那些实例化比较占用资源的类,通过虚拟代理可以延迟类的实例化,在需要调用的时候再进行实例化。

  • 相关阅读:
    HttpUtils
    其实就是这么回事
    Spring 、 CXF 整合 swagger 【试炼】
    Jetty 学习记录
    WebSphere 学习记录
    Apache 学习记录
    WebLogic 学习记录
    Hessian 学习记录
    IntelliJ IDEA学习记录
    IntelliJ IDEA学习记录
  • 原文地址:https://www.cnblogs.com/shamoguying1140/p/3169206.html
Copyright © 2011-2022 走看看