• 设计模式之结构型代理模式


    由于一个对象不能直接引用另一个对象,所以需要通过代理对象在这两个对象之间起到中介作用。
    跨域问题应该是使用代理模式解决的一个最典型的问题。由于用户模块上传的照片量越来越大,导致服务器需要将上传模块重新部署到另外一个域中,这就导致了跨域问题。我们可以将相册页面和上传模块所在的服务器抽象成两个对象,想让跨域两端的对象之间实现通信,就需要找个代理对象来实现他们之间的通信。
    代理对象有很多种,简单一点的如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."')";
    ?>

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

  • 相关阅读:
    服务端增加WCF服务全局异常处理机制
    ASP.NET MVC异常处理方案
    [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
    Asp.Net Mvc的几个小问题
    C# 多线程之Thread类
    C#泛型
    c#public、private、protected、internal、protected internal
    ASP.NET并发处理
    GDB调试器的使用
    【多媒体封装格式详解】---MKV
  • 原文地址:https://www.cnblogs.com/camille666/p/design_pattern_struct_proxy.html
Copyright © 2020-2023  润新知