代理模式proxy_反向代理是什么

代理模式proxy_反向代理是什么代理模式 Proxy动机模式定义实例结构要点总结笔记动机在面向对象系统中,由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程额外的访问等),直接访问会给使用者,或者系统结构带来很多麻烦.如何在不是去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接曾是软件开发中常见的解决方式模式定义为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问实例朴素客户端要去使用process 但是process周围需要做很多事情class ISubject{p

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

动机

在面向对象系统中,由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程额外的访问等),直接访问会给使用者,或者系统结构带来很多麻烦.

如何在不是去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接曾是软件开发中常见的解决方式

模式定义

为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问

实例

朴素
客户端要去使用process 但是process周围需要做很多事情

class ISubject{ 
   
public:
    virtual void process();
};

class RealSubject : public ISubject{ 
   
public:
    virtual void process(){ 
   
        //..
    }
}

class ClientApp{ 
   
    ISubject *subject;
public:
    ClientApp(){ 
   
        subject = new RealSubject();
    }
    ISubject *subject;
    void DoTask(){ 
   
        //... 可能是分布式原因 可能是安全原因等等 需要很多操作
        subject -> process();
        //... 同样需要很多操作
    }
}

代理模式

class ISubject{ 
   
public:
    virtual void process();
};

class RealSubject : public ISubject{ 
   

public:
    virtual void process(){ 
   
        //..自己写的类方法
    }
}

class SubjectProxy : public ISubject{ 
      
private:
    RealSubject realSubject;
public:
    virtual void process(){ 
   
        //对RealSubject的一种间接访问
        
        //... 可能是分布式原因 可能是安全原因等等 需要很多操作
        RealSubject->process();
        //... 同样需要很多操作
    }
}
//Proxy的设计
class ClientApp{ 
   
    ISubject *subject;
public:
    ClientApp(){ 
   
        subject = new RealSubject();
    }
    ISubject *subject;
    void DoTask(){ 
   
        subject -> process();
    }
}

结构

在这里插入图片描述

要点总结

  • “增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法.在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是这一问题的解决手段
  • 具体proxy设计模式的实现方法,实现粒度都相差很大.有些可能对单个对象做细粒度的控制,如copy-on-write技术,有些可能对组件模块提供抽象代理曾,在架构层次对对象做proxy
  • proxy并不一定要求保持接口完整的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的.

笔记

  • 能否仍然使用new一个对象然后访问方法地方式 继续访问远程对象?
  • 透明操作:和原来new一个对象 然后访问一样简单 但是自己不需要关心内部细节
  • 一般在分布式应用代理类及其频繁,如你访问别人的接口.你去访问那个接口 往往会生成一个那个接口的代理类 否则的话你得自己控制所有的访问细节
  • 代理的核心思想是增加间接层 来实现不为外界所知的一些功能
  • 字符串一般使用copy-on-write技术 当需要改对象的时候 需要在内部拷贝一份 就是用的代理
  • 一个方法调用前的安全控制 或者是分布式系统调用前做的网络通信 等等代理都会频繁用到
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168504.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows下git显示文件被修改,实际没有改动的问题解决办法

    windows下git显示文件被修改,实际没有改动的问题解决办法

    2021年11月7日
    295
  • fastdfs工作原理(技术原理)

    FastDFS架构:FastDFS服务端有三个角色:跟踪服务器(trackerserver)、存储服务器(storageserver)和客户端(client)。**trackerserver:**跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。**storageserver:**存储服务器(又称:存储节点或数据服务器),文件和文件属性(me

    2022年4月13日
    41
  • batchnorm原理理解「建议收藏」

    batchnorm原理理解「建议收藏」接触CNN也一段时间了,最近也到了秋招期间,面试的时候可能会问到的一些内容需要做一个整理CNN-BN层参考了一个大神的博客,感觉讲的很深入也很好理解。我这里主要是对他的博客做一个自己的归纳整理,主要是为了方便自己去理解,也欢迎大家一起讨论自己的理解。这里给出大神的博客地址:https://blog.csdn.net/qq_25737169/article/details/79048…

    2022年5月16日
    42
  • Python贪吃蛇 (完整代码+详细注释+粘贴即食)

    Python贪吃蛇 (完整代码+详细注释+粘贴即食)代码#!/usr/bin/envpython#-*-coding:utf-8-*-#author:Wangdalitime:2021年1月24日16:08:44#python实现:贪吃蛇”’游戏玩法:回车开始游戏;空格暂停游戏/继续游戏;方向键/wsad控制小蛇走向”””思路:用列表存储蛇的身体;用浅色表示身体,深色背景将身体凸显出来;蛇的移动:仔细观察,是:身体除头和尾不动、尾部消失,头部增加,所以,新添加的元素放在列表头部、删除尾部元素;游戏结束判定策略:超出

    2022年5月15日
    36
  • Asp.net WebForm使用NPOI导出Excel

    Asp.net WebForm使用NPOI导出Excel废话不多说,直接上代码publicvoidExportExcel(){stringdatefrom=Request.QueryString[“datefrom”];stringdateto=Request.QueryString[“dateto”];string…

    2022年6月21日
    22
  • 超详细Eclipse安装教程

    超详细Eclipse安装教程超详细 Eclipse 安装教程

    2025年7月25日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号