代理模式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技术 当需要改对象的时候 需要在内部拷贝一份 就是用的代理
  • 一个方法调用前的安全控制 或者是分布式系统调用前做的网络通信 等等代理都会频繁用到
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 腾讯云服务器配置ssl,腾讯云服务器SSL证书申请及配置[通俗易懂]

    腾讯云服务器配置ssl,腾讯云服务器SSL证书申请及配置[通俗易懂]最近在研究微信小程序,服务端需要部署在一台服务器上,查看了一下,腾讯云在搞活动,就申请了腾讯云的服务器,但是微信小程序访问需要用https协议才能请求,于是研究了一下如何申请及配置ssl证书。本人穷逼一枚,一向以节俭,所以申请了一个免费证书。申请步骤如下:1、登录证书申请页面https://console.qcloud.com/ssl/apply2、输入必要信息,通用名称及申请邮箱,点击下一步这一…

  • Oracle Hints具体解释

    Oracle Hints具体解释

  • 分数相加[通俗易懂]

    分数相加[通俗易懂]本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。输入格式:输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1

  • 人工智能猴子摘香蕉实验报告_猴子和香蕉问题

    人工智能猴子摘香蕉实验报告_猴子和香蕉问题哈工大人工智能实验

  • elasticsearch面试常问问题_java面试题汇总

    elasticsearch面试常问问题_java面试题汇总Elasticsearch是基于Lucene的Restful的分布式实时全文搜索引擎,每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据。全文检索是指对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当查询时,根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。**(1)index索引:**索引类似于mysql中的数据库,Elasticesearch中的索引是存在数据的地方,包含了一堆有相似结构的文档数据。**(2

  • windows10 kms激活_windows10激活密钥在哪

    windows10 kms激活_windows10激活密钥在哪@echooff&setlocalEnableDelayedExpansion&color5etitleKMS_ActivationforWindows10-(Comlan)echo::::::::::::::::::::::::::::::::::::::::::::::::echo::自动检查Win10的版本,导入相应的KMS密钥::echo…

    2022年10月28日

发表回复

您的电子邮箱地址不会被公开。

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