代理模式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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 讲真,MySQL索引优化看这篇文章就够了

    讲真,MySQL索引优化看这篇文章就够了

    2022年2月15日
    46
  • c语言xml解析器libxm2

    c语言xml解析器libxm2写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML库,而且它同时支持多种编程语言;2)LIBXML2库的Tutorial写得不太好,尤其是编码转换的部分,不适用于中文编码的转换;3)网上的大多数关于Libxml2的介绍仅仅是翻译了自带的资料,没有详细介绍如何在windows平台下进行编程,更很少提到如

    2022年7月12日
    54
  • jmeter对接口进行压测_jmeter接口压测流程详解

    jmeter对接口进行压测_jmeter接口压测流程详解macjmeter压测工具的安装

    2025年7月7日
    6
  • IDEA官方汉化包

    IDEA官方汉化包IDEA修改为中文模式自IEDA2020发行不久,IDEA官方就发布了支持中文喜讯。今晚看到同学还在为找到IDEA汉化包而高兴,不由得想到可以水一篇博客。这是我用官方的包汉化IDEA2020.1后的结果:基本上能看到的英文字母都汉化成简体中文了,就很nice!汉化过程很简单Ctrl+Alt+s进入setting找到Plugins,直接在如下的搜索框中输入chinese回车,选择第一个如图所示插件进行下载并应用。然后重启即可发现:诶!英文变成中文了。也可以在官网下载jar包导入IDEA安装

    2022年6月9日
    292
  • linux 查看igmp类型,Linux IGMP 学习笔记 之一 IGMP协议格式

    linux 查看igmp类型,Linux IGMP 学习笔记 之一 IGMP协议格式一、IGMP定义及分类IGMP:INTERNET组管理协议,与广播最大的不同是,IGMP允许每一个网络设备决定是否参与到一个特定的多播群组中。IGMP的ip地址,组播ip地址的范围为224.0.0.0-239.255.255.255。其中224.0.0.1代表子网上的所有计算机,224.0.0.2代表子网上一、IGMP定义及分类IGMP:INTERNET组管理协议,与广播最大的不同是,IGMP…

    2025年11月15日
    3
  • Docker镜像仓库registry

    Docker镜像仓库registry

    2021年5月31日
    110

发表回复

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

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