zoukankan      html  css  js  c++  java
  • 设计模式之结构型代理模式

    由于一个对象不能直接引用另一个对象,所以需要通过代理对象在这两个对象之间起到中介作用。
    跨域问题应该是使用代理模式解决的一个最典型的问题。由于用户模块上传的照片量越来越大,导致服务器需要将上传模块重新部署到另外一个域中,这就导致了跨域问题。我们可以将相册页面和上传模块所在的服务器抽象成两个对象,想让跨域两端的对象之间实现通信,就需要找个代理对象来实现他们之间的通信。
    代理对象有很多种,简单一点的如img之类的标签通过src可以向其他域下的服务器发送请求,不过这类请求是get请求,是单向的,不会有响应数据,另外一种代理对象的形式是通过script标签。而我们需要的代理对象,是对页面与浏览器间通信的,JSONP就实现了一种代理模式。我们知道src属性可以实现get请求,因此可以在src指向的url地址上添加一些字段信息,服务器获取这些字段信息,相应生成内容。

    // 前端浏览器页面
    <script type="text/javascript">
    // 回调函数
    function jsonpCallBack(res,req) {
      console.log(res,req);
    }
    </script>
    <script type="text/javascript" src="http://localhost/test/jsonp.php?callback=jsonp CallBack&data=getJsonPData"></script>
    // 另一个域下的服务器请求接口
    <?php
      /* 后端获取请求字段数据,并生成返回内容 */
      $data = $_GET["data"];
      $callback = $_GET["callback"];
      echo $callback."('success', '".$data."')";
    ?>

    这种方式可以想象成合理的一只小船,通过小船将你的请求发送给对岸,然后对岸的人们将数据放在小船里为你带回来。
    通过代理可以先加载预览图片然后再加载开销大的图片,它可以解决系统之间耦合度以及系统资源开销大的问题,通过代理对象可以保护被代理对象,使被代理对象不受外界的影响。

  • 相关阅读:
    CodeforcesBeta Round #19 D. Points 离线线段树 单点更新 离散化
    挑战练习题3.3 POJ 2886 Who Gets the Most Candies? 树状数组
    hdu4288 Coder 离线线段树 单点更新 区间求和 离散化?
    zoj 1610 Count the Colors 线段树 区间更新
    51nod 1307 绳子与重物 二分+dfs / 并查集
    51nod 1116 K进制下的大数 暴力/数论
    Wannafly2016-12-27 SPOJ-INTSUB 数学
    C++——Vector
    LEDE Project
    Raspberry Pi 3 with Openwrt
  • 原文地址:https://www.cnblogs.com/camille666/p/design_pattern_struct_proxy.html
Copyright © 2011-2022 走看看