代理模式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/169036.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月11日 下午8:36
下一篇 2022年8月11日 下午8:36


相关推荐

  • java递归无限层级树_最小生成树和最短路径的区别

    java递归无限层级树_最小生成树和最短路径的区别给定一棵 N 个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树。求增加的边的权值总和最小是多少。注意: 树中的所有边权均为整数,且新加的所有边权也必须为整数。输入格式第一行包含整数 t,表示共有 t 组测试数据。对于每组测试数据,第一行包含整数 N。接下来 N−1 行,每行三个整数 X,Y,Z,表示 X 节点与 Y 节点之间存在一条边,长度为 Z。输出格式每组数据输出一个整数,表示权值总和最小值。每个结果占一行。数据范围1≤N≤60001≤Z≤

    2022年8月9日
    7
  • python复杂网络分析库networkx

    python复杂网络分析库networkx文章目录1简介安装支持四种图绘制网络图基本流程2Graph-无向图节点边属性有向图和无向图互转3DiGraph-有向图一些精美的图例子绘制一个DNN结构图一些图论算法最短路径问题一些其他神经网络绘制工具列表参考1简介networkx是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。利用networ…

    2025年7月25日
    5
  • 视频 |Java高性能优化电商秒杀

    视频 |Java高性能优化电商秒杀

    2022年2月13日
    45
  • system verilog教程(魔方教程图解)

    第一章:Verilog简介1.1Verilog教程1.2Verilog简介1.3Verilog环境搭建1.4Verilog设计方法第二章:…

    2022年4月16日
    639
  • python skitlearn_Python sklearn

    python skitlearn_Python sklearn1.Sklearn简介Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(DimensionalityReduction)、分类(Classfication)、聚类(Clustering)等方法。当我们面临机器学习问题时,便可根据下图来选择相应的方法。Sklearn具有以下特点:简单高效的数据挖…

    2022年8月31日
    5
  • Ubuntu虚拟显示器_ubuntu创建虚拟环境

    Ubuntu虚拟显示器_ubuntu创建虚拟环境参考:http://blog.chinaunix.net/uid-27875-id-5821774.html

    2022年8月21日
    11

发表回复

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

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