代理模式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)
blank

相关推荐

发表回复

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

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