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."')";
    ?>

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

  • 相关阅读:
    .net获取服务器端路径
    js跳转页面回传值问题处理
    关于服务器文件保存到本地文件的浅谈
    ADO.NET中的五个主要对象
    C# 禁止windows程序重复运行的两种基本方法
    一个更好一点的主线程与子线程之间通信的做法
    Django+Nginx配置过程
    一个简单的模板系统的实现(动态载入DLL)
    我的Notepad++环境配置
    一个去除Aspose.Cells生成的EXCEL2007格式中Evaluation Warning的笨办法
  • 原文地址:https://www.cnblogs.com/camille666/p/design_pattern_struct_proxy.html
Copyright © 2011-2022 走看看