代理_代理模式 - CSDN
代理 订阅
代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接INTERNET(国际互联网)和INTRANET(局域网)。C#语言中,代理是指Delegate,也翻译为委托。C#中的delegate和C++中的函数指针基本是一回事,C#正是以delegate的形式实现了函数指针。不同的地方在于C#中delegate是类型安全的。(严格来说,C#中的委托是以面向对象方式将符合某种特征的方法封装为参数类型,从而使其可以作为参数被使用;委托的实现原理与函数指针完全不同)delegate仅仅关注涉及的方法(函数)的细节。它是一种类型,这种类型的变量可以用来赋值不同(但类似)的方法(函数)。说白了,即是将处理代码“放置”到变量中,“执行”这个变量,就是执行这个变量中“放置”的代码。 展开全文
代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接INTERNET(国际互联网)和INTRANET(局域网)。C#语言中,代理是指Delegate,也翻译为委托。C#中的delegate和C++中的函数指针基本是一回事,C#正是以delegate的形式实现了函数指针。不同的地方在于C#中delegate是类型安全的。(严格来说,C#中的委托是以面向对象方式将符合某种特征的方法封装为参数类型,从而使其可以作为参数被使用;委托的实现原理与函数指针完全不同)delegate仅仅关注涉及的方法(函数)的细节。它是一种类型,这种类型的变量可以用来赋值不同(但类似)的方法(函数)。说白了,即是将处理代码“放置”到变量中,“执行”这个变量,就是执行这个变量中“放置”的代码。
信息
作    用
防火墙
工作区域
开放系统互联模型的会话层
中文名
代理服务器
外文名
proxy server
代理网络中的代理
●常见问题●什么是代理服务器●代理服务器的安全以及相关问题●IE,MyIE及TT浏览器中如何使用代理● FTP软件中如何使用代理上传● 网络游戏中如何使用代理服务器 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。更重要的是:Proxy Server(代理服务器)是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的对话层。主要的功能有:代理功能1.突破自身IP访问限制,访问国外站点。教育网、169网等网络用户可以通过代理访问国外网站。2.访问一些单位或团体内部资源,如某大学FTP(前提是该代理地址在该资源 的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。3.突破中国电信的IP封锁:中国电信用户有很多网站是被限制访问的,这种限制是人为的,不同Serve对地址的封锁是不同的。所以不能访问时可以换一个国 外的代理服务器试试。4.提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。5.隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。设置代理服务器1.(IE5.0以上版本中设置代理:菜单栏“工具”->下拉菜单“Internet选项”->选项卡“连接”->在“局域网设置”中选中您使用的连接,然后点击右侧的“设置”->在中间的“代理服务器”栏选中“使用代理服务器”->在“地址”和“端口”栏输入本站提供的HTTP代理服务器->确定->确定。2.MyIE2中设置代理服务器:菜单栏“选项”——>“代理服务器”——>“代理设置”——>在输入框中输入标准格式的代理服务器,如XXX.XXX.XXX.XXX:端口,然后“确定”并退出,继续,菜单栏“选项”——>“代理服务器”——>然后选择刚才输入的代理服务器3.腾讯浏览器(TT浏览器)中设置代理服务器:菜单栏“工具”——>“WWW代理”——>“设置代理”——>在代理设置对话框中,点击“新增”——>在代理设置区中,输入代理,然后“确定”并退出,继续,菜单栏“工具”——>“WWW代理”——>然后选择刚才输入的代理服务器代理QQ方法用SOCKS代理上QQ,可隐藏真实IP地址,方法如下:1.启动OICQ,登陆后右击下方开始菜单处的QQ小图标,选择“系统参数”==》“网络设置”2.在服务器地址与端口处填QQ服务器地址,最好数字的。如5202.104.129.2515端口:80003.在“使用SOCKS5代理服务器”前打上勾,在“代理服务器地址”与“端口号”处,(QQ代理的端口号一般为1080)分别填上最新SOCKS代理(SOCKS4也可用)4.在“校验用户名”与“校验用户密码”处全部删空,然后点“测试”,如能通过,则说明代理服务器工作正常,否则换一个。5.按“确定”,点击任务栏的QQ小图标,先离线再上线即可。。代理常见FTP工具1.FlashFXP3.0以前版本中设置代理:菜单栏“选项”——>参数设置——>代理和防火墙,然后在“代理服务器”项中选择代理类型,填写代理2.FlashFXP3.0以后版本中设置代理:菜单栏“选项”——>参数设置——>连接,然后在“代理服务器”项中选择代理类型,填写代理3.CuteFTP XP 5.0.2 中文版中设置代理:菜单栏“编辑”——>设置——>连接——>SOCKS-->选择代理类型,如SOCKS4或者SOCKS5,并填写代理4.LeapFtp中设置代理:菜单栏“选项”——>参数设置——>常规——>代理,将“使用代理”前面的方框钩上,然后填写代理,并将下面的SOCKS防火墙钩上代理服务器除了网络服务商为了各种目的而开设外,大部分是新建网络服务器设置的疏漏!虽然法律尚无具体规定,但没有经过允许而使用他人的服务器当然还是不太好!虽然目的主机一般只能得到您使用的代理服务器IP,似乎有效的遮掩了你的行程,但是值得一提的是:网络服务商开通的专业级代理服务器一般都有路由和流程记录,因此可以轻易的通过调用历史纪录来查清使用代理服务器地址的来路。当然,利用多层代理会增加被捕获的难度,但也不是不可能的。曾经就有报道有人使用代理服务器进攻“天府热线”,进行非法活动而被抓的消息。因此,建议大家不要利用代理服务器来进行特别行动!只要你不使用代理进行非法活动,一般是没有关系的。网络代理分类网络代理分类:在线代理HTTP代理SOCKET4代理SOCKET5代理 vpn代理在线代理常识在线代理常识:在线网页代理(Web Proxy Server),是简单、高速、有效的访问国际网站的最佳途径,它的功能就是用户与Web服务器之间的一个中转站,当用户访问国际网站时候,通过代理服务器来访问目标网站,并缓存在代理服务器。这样一来如果当用户访问的站点之前有人访问过,用户将直接从代理服务器上读取信息,因此显著提高浏览速度与效率。另外,网页代理还能屏蔽恶意网页代码保护您的浏览器不受干扰。另外补充一下:网络加速器也是代理的一种形式。SOCK5代理服务器SOCK5代理服务器 :被代理端与代理服务器通过“SOCK4/5代理协议”进行通迅(具体协议内容可查看RFC文档)。SOCK4代理协议可以说是对HTTP代理协议的加强,它不仅是对HTTP协议进行代理,而是对所有向外的连接进行代理,是没有协议限制的。也就是说,只要你向外连接,它就给你代理,并不管你用的是什么协议,极大的弥补了HTTP代理协议的不足,使得很多在HTTP代理情况下无法使用的网络软件都可以使用了。(例如:OICQ、MSN等软件)SOCK5代理协议又对前一版进行了修改,增加了支持UDP代理及身份验证的功能。它不是“协议代理”,所以它会对所有的连接进行代理,而不管用的是什么协议。HTTP代理HTTP代理:同上利用HTTP协议通讯的方式,HTTP协议即超文本传输协议,是Internet上进行信息传输时使用最为广泛的一种非常简单的通信协议。部分局域网对协议进行了限制,只允许用户通过HTTP协议访问外部网站。
收起全文
精华内容
参与话题
  • C++ 代理模式

    千次阅读 2018-05-30 09:31:14
    代理模式(Proxy Pattern)为其他对象提供了一种代理,以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 简述 模式结构...

    简述

    代理模式(Proxy Pattern)为其他对象提供了一种代理,以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

    | 版权声明:一去、二三里,未经博主允许不得转载。

    模式结构

    UML 结构图:

    Proxy Pattern

    • Subject(抽象主题):声明了 RealSubject 与 Proxy 的共同接口,定义了某个/些功能。
    • RealSubject(真实主题):通常执行具体的业务逻辑,Proxy 控制对它的访问。
    • Proxy(代理):持有一个 RealSubject 引用(指针),可以在需要时将请求转发给 RealSubject,以此起到代理的作用。
    • Client(客户端):通过 Proxy 间接地与 RealSubject 进行交互。

    注意: Proxy 和 RealSubject 都实现了 Subject 的接口,这允许 Client 可以像处理 RealSubject 一样处理 Proxy。

    优缺点

    优点:

    • 代理模式能将代理对象与真正被调用的对象分离,在一定程度上降低了系统的耦合度。
    • 在客户端和目标对象之间,代理起到一个中介作用,这样可以保护目标对象。在对目标对象调用之前,代理对象也可以进行其他操作。

    缺点:

    • 这种模式引入了另一个抽象层,这有时可能是一个问题。如果真实主题被某些客户端直接访问,并且其中一些客户端可能访问代理类,这可能会导致不同的行为。
    • 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
    • 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

    适用场景

    根据目的和实现方式的不同,代理模式可分为很多种,常见的有:

    • 远程代理(Remote Proxy)
      为一个位于不同地址空间的对象提供一个本地代理,对代理的方法调用会导致对远程对象的方法调用。ATM 就是一个例子,ATM 可能会持有(存在于远程服务器中的)银行信息的一个代理对象。

    • 虚拟代理(Virtual Proxy)
      使用虚拟代理,代理可以作为一个(资源消耗较大的)对象的代表。虚拟代理经常延迟对象的创建,直到需要为止。在创建对象之前(及创建对象过程中),虚拟代理也可以作为对象的代理;之后,代理将请求直接委托给 RealSubject。

    • 保护代理(Protection Proxy)
      根据访问权限,可以使用保护代理来控制对资源的访问。例如,有一个员工对象,保护代理可以允许普通员工调用对象的某些方法,管理员调用其他方法。

    • 缓冲代理(Cache Proxy)
      为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。

    • 智能引用代理(Smart Reference Proxy)
      当一个对象被引用时,提供一些额外的操作(例如:将对象被调用的次数记录下来)。

    案例分析

    中国移动 - 代理商

    CMCC

    在现实生活中,代理无处不在 - 代购、手机代理商、火车票代售点。。。

    记得刚上大学时,去学校报道,基本上都要买手机(好怀念 Nokia)、办卡、充值。学校附近的各种代理点很多:“办卡、办卡,动感地带月租只要 18 啦”、“充值、充值,充 100 送 50”。。。各种吆喝声此起彼伏 O(∩_∩)O哈哈~

    这里,代理模式可以理解为:移动公司把充值的职责托付给代理点,代理点代替移动公司充值,客户直接与代理点打交道,而非移动公司。

    代码实现

    创建抽象主题

    定义一个电信运行商 ITelco,并为其提供一个接口 Recharge(),用于充值:

    // subject.h
    #ifndef SUBJECT_H
    #define SUBJECT_H
    
    // 电信运营商
    class ITelco
    {
    public:
        virtual ~ITelco(){}
        virtual void Recharge(int money) = 0;  // 充值
    };
    
    #endif // SUBJECT_H

    创建真实主题

    我一直用的是移动,所以就选它吧!它继承自抽象主题类,提供了业务方法的具体实现:

    // real_subject.h
    #ifndef REAL_SUBJECT_H
    #define REAL_SUBJECT_H
    
    #include "subject.h"
    #include <iostream>
    
    // 中国移动
    class CMCC : public ITelco
    {
    public:
        void Recharge(int money) override {
            std::cout << "Recharge " << money;
        }
    };
    
    #endif // REAL_SUBJECT_H

    创建代理

    由于刚开学,代理点生意十分火爆,小顾客顾不上 - 低于 50 不充:

    // proxy.h
    #ifndef PROXY_H
    #define PROXY_H
    
    #include "subject.h"
    #include "real_subject.h"
    #include <iostream>
    
    // 代理点
    class Proxy : public ITelco
    {
    public:
        Proxy() : m_pCMCC(NULL) {}
        ~Proxy() { delete m_pCMCC; }
    
        // 低于 50 不充
        void Recharge(int money) override {
            if (money >= 50) {
                if (m_pCMCC == NULL)
                    m_pCMCC = new CMCC();
                m_pCMCC->Recharge(money);
            } else {
                std::cout << "Sorry, too little money" << std::endl;
            }
        }
    
    private:
        CMCC *m_pCMCC;
    };
    
    #endif // PROXY_H

    注意: 代理类也是抽象主题类的子类,调用时可以在原有业务方法的基础上附加一些新的方法,来对功能进行扩充或约束。

    创建客户端

    现在,开始排队办业务啦:

    // main.cpp
    #include "proxy.h"
    
    #ifndef SAFE_DELETE
    #define SAFE_DELETE(p) { if(p){delete(p); (p)=NULL;} }
    #endif
    
    int main()
    {
        Proxy* proxy = new Proxy();
        proxy->Recharge(20);
        proxy->Recharge(100);
    
        SAFE_DELETE(proxy);
    
        getchar();
    
        return 0;
    }

    输出如下:

    Sorry, too little money
    Recharge 100

    一开始我们拿了 20 块钱去充值,代理点不给充。。。一怒之下,狂甩 100!

    展开全文
  • 代理的三种实现方式

    千次阅读 2019-01-09 15:53:08
    代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 简单来说就是说代理就是...

    代理模式

    代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.

    简单来说就是说代理就是增强方法,让方法实现更多的额功能

    举个栗子:

    你过生日想邀请laddygaga来给你唱歌,可是laddygaga不认识你,你也联系不到他,这样你可以通过他的经纪人,来间接和laddygaga进行交流。要做什么,对方要多少钱,都是和经纪人商量。这就是一个代理模式。经纪人就是一个代理。

    1,静态代理

    针对于网上大多数静态代理写成装饰者模式(装饰着模式和静态代理的区别https://blog.csdn.net/weixin_35609314/article/details/78913635),做了一下总结:

    1,被代理的对象必须是一个类,且必须有父接口或者父类;

    2,被代理的类需要增强的方法必须在父类或者父接口中出现;

    3,静态代理的使用目的是为了保护和隐藏目标对象,所以代理类的无参构造器中就创建目标对象。

    interface Perple {
    	public void learn();
    }
    class Student implements Perple {
    	public Student() {
    		super();
    	}
    	@Override
    	public void learn() {
    		System.out.println("Students learning mathematics");
    	}
    }
    class UniversityStudent implements Perple {
    	Perple perple;
    	public UniversityStudent() {
    		this.perple = new Student();
    	}
    	@Override
    	public void learn() {
    		this.perple.learn();
    		System.out.println("University student studying advanced mathematics");
    	}
    }

    缺点:

    1,因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多

    2,如果代理对象实现的是接口,父接口中增加方法,目标对象与代理对象都要维护

    动态代理方式可以解决上述缺点

    2,动态代理

    也叫jdk代理,java底层封装了实现细节,格式固定,代码简单。直接调用java.lang.reflect.Proxy的静态方法newProxyInstance即可

    1,被代理的对象必须是一个类,且必须有父接口;

    2,被代理的类需要增强的方法必须在父接口中出现;

    static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )

    参数:

    1,ClassLoader loader,:指定当前目标对象使用类加载器,获取加载器的方法是固定的

    2,Class<?>[] interfaces,:目标对象实现的接口的类型,使用泛型方式确认类型

    3,InvocationHandler h:事件处理,执行目标对象的方法时,会触发事件处理器的方法,会把当前执行目标对象的方法作为参数传入

    public class DynamicProxy {
    	public static void main(String[] args) {
    		Singer singer = new Singer();
    		Object newProxyInstance = java.lang.reflect.Proxy.newProxyInstance(
                        singer.getClass().getClassLoader(),
    		    singer.getClass().getInterfaces(),
                         (proxy, method, ar) -> {
    					System.out.println("22222");
    					method.invoke(singer, args);
    					System.out.println("3333");
    					return null;
    				});
    		ISinger i = (ISinger) newProxyInstance;
    		i.sing();
    	}
    }
    class Singer implements ISinger {
    	public void sing() {
    		System.out.println("sing");
    	}
    }
    interface ISinger {
    	public void sing();
    }

    上述:    (proxy, method, ar) -> {
                        System.out.println("22222");
                        method.invoke(singer, args);
                        System.out.println("3333");
                        return null;
                    });

    是java8的lambda表达式等于 

    new InvocationHandler() {
                        @Override
                        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                            System.out.println("22222");
                            method.invoke(singer, args);
                            System.out.println("3333");
                            return null;
                        }
                    }

    注意:代理对象不需要实现接口,但是目标对象一定要实现接口,否则不能用动态代理。但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候就可以使用以目标对象子类的方式类实现代理,这种方法就叫做:Cglib代理

    3.Cglib代理

    Cglib代理,也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能的扩展.

    1,Cglib是一个强大的高性能的代码生成包,它可以在运行期扩展java类与实现java接口.它广泛的被许多AOP的框架使用,例如Spring AOP和synaop,为他们提供方法的interception(拦截)

    2,Cglib包的底层是通过使用一个小而块的字节码处理框架ASM来转换字节码并生成新的类.不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉.

    1,被代理的类

    public class TargetProxy {
    	public void save() {
    		System.out.println("假如这个是Spring的service层的方法");
    	}
    }
    

    2,代理对象

    public class ProxyFactory implements MethodInterceptor {
    	private Object target;
    
    	public ProxyFactory(Object target) {
    		this.target = target;
    	}
    
    	// 给目标对象创建一个代理对象
    	public Object getProxyInstance() {
    		Enhancer en = new Enhancer();
    		en.setSuperclass(target.getClass());
    		en.setCallback(this);
    		return en.create();
    	}
    
    	@Override
    	public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
    		System.out.println("开始事务...");
    		Object returnValue = method.invoke(target, args);
    		System.out.println("提交事务...");
    		return returnValue;
    	}
    }

    3,测试app

    public class App {
    	public static void main(String[] args) {
    		// 目标对象
    		TargetProxy target = new TargetProxy();
    		ProxyFactory factory = new ProxyFactory(target);
    		target = (TargetProxy) factory.getProxyInstance();
    		// 执行代理对象的方法
    		target.save();
    	}
    
    }
    

    需要导入的包

     

     

     

    展开全文
  • 免费IP代理

    万次阅读 多人点赞 2019-05-09 17:18:31
    20、http://www.nimadaili.com/泥马IP代理 19、http://lab.crossincode.com/proxy/Crossin编程教室 18、http://www.xsdaili.com/dayProxy/ip/1415.html小舒代理 17、http://www.xiladaili.com/西拉免费代理IP 16...
    展开全文
  • 代理模式(proxy)

    千次阅读 2018-08-29 11:08:12
    代理模式是一个大类,而且会经常用到,它包含了远程代理,虚拟代理,防火墙代理等,当然还有动态代理了,学过spring的人应该不陌生。 各种代理模式样式差别很大,不容易从程序上辨认,但是可以从功能上认出来,...

    前言

      • 代理模式是一个大类,而且会经常用到,它包含了远程代理,虚拟代理,防火墙代理等,当然还有动态代理了,学过spring的人应该不陌生。
      • 各种代理模式样式差别很大,不容易从程序上辨认,但是可以从功能上认出来,今天我就举个例子聊聊代理模式最基本的样子,从例子中认识代理模式。
      • 举例为静态代理的基本应用,稍后再介绍代理模式的一些特点。

     

    情境引入

           本次我们以滴滴为例,滴滴在8.23接到乘客的投诉电话,因此是可以接受投诉的,只不过投诉处理不及时,而8.24日,警方打电话给滴滴客服,滴滴客服却没有权限查询犯罪嫌疑人的出车记录,说明滴滴客服只是滴滴的一个代理,而有权限的做查询的则是滴滴公司。因此本本例中滴滴客服作为代理,代理滴滴公司。

     

    角色组成(代理模式的基本组成)

    抽象主题角色

    一个抽象接口(滴滴)

    具体主题角色

    需要被代理的对象(滴滴公司)

    代理角色

    对象的代理(滴滴客服)

     

    程序类图

     

    java源程序

    滴滴接口

    package proxy_08;
    
    public interface Didi {
    	public void complain();//可以投诉
    	public void queryCarRecord();//可以查询出车记录
    }
    

    滴滴公司(主题)

    package proxy_08;
    
    public class DidiCompany implements Didi{
    
    	public void complain() {
    		System.out.println("收到投诉,请耐心等待处理结果");
    	}
    
    	public void queryCarRecord() {
    		System.out.println("正在查询出车记录,请耐心等待");
    	}
    
    }
    

    滴滴客服(代理)

    package proxy_08;
    
    public class DidiCallCenterProxy implements Didi{
    	DidiCompany didi;
    	public DidiCallCenterProxy(DidiCompany didi) {
    		this.didi=didi;
    	}
    	public void complain() {
    		didi.complain();//调用主题的方法
    	}
    
    	public void queryCarRecord() {
    		System.out.println("不好意思,一线客服没有权限,请去总公司查询");
    	}
    
    }
    

    客户端

    package proxy_08;
    
    public class Client {
    	public static void main(String[] args) {
             	DidiCompany dc=new DidiCompany();
     		Didi didi=new DidiCallCenterProxy(dc);//生成代理对象
    		didi.complain();//投诉
     		didi.queryCarRecord();//查询出车记录
    	}
    }
    

    运行结果

         

     

    实例分析

           从举例中我们可以看出 ,由于代理与被代理实现了相同的接口,因此代理模式可以代理对象的方法,而代理模式的一个用处也就显而易见了,代理模式可以有选择的暴露对象的接口,而对访问者屏蔽一些接口,这样就实现了对对象的控制访问。当然代理模式用途细分就比较多了,但核心都完成了对被代理对象的控制访问。

    现在我们在重新看代理模式 就应该清楚多了

     

    定义

    代理模式为对象提供一个替身或者占位符以控制对这个对象的访问

     

    应用场景

    1. 应用远程代理控制访问远程对象
    2. 虚拟代理控制访问创建开销大的对象
    3. 保护代理基于权限控制对资源的访问
    4. 动态代理去看aop就行了

     

    代理模式优点

      • 实现了访问者与访问对象之间的解耦
      • 代理模式在客户端与对象之间起到中介作用,保护了对对象的访问
      • 代理模式可以在访问过程中增加逻辑(aop)

     

    缺点

           增加代理会使程序请求处理变慢

     

    代理模式与装饰者模式对比

        看类图就知道代理模式和装饰者模式长的是真像,但是说区分他们也容易

    差别

    代理模式

    装饰者模式

    相同点

    都有统一的接口

     

    相同点

    代理模式和对象都实现了接口

    装饰者和对象也实现了接口

    相同点

    都完成了对对象的包装

     

    不同

    代理包装对象是为了控制对对象的访问

    装饰者是为了给对象添加行为

     

    运用简单工厂

           由于对象的生成放在了客户端,我们可以轻易看出运用了代理模式,现在我们用简单工厂封装一下对象的创建,在看看客户端有什么变化,还能不能认出来应用了代理模式呢?

     

    引入简单工厂

    package proxy_08;
    
    public class DidiFactory {
    	Didi didi;
    	public Didi getInstance(){
    		didi=new DidiCallCenterProxy(new DidiCompany());//建立代理对象
    		return didi;
    	}
    }
    

    修改客户端(别的类不用动)

    package proxy_08;
    
    public class Client {
    	public static void main(String[] args) {
    		DidiFactory df=new DidiFactory();
    		Didi didi=df.getInstance();
    		didi.complain();
    		didi.queryCarRecord();
    	}
    }
    

     

    展开全文
  • 通俗易懂的代理模式

    2020-09-04 21:25:00
    静态代理:一个代理只帮同一种人代理 动态代理:一个代理可以帮不同的人代理 静态代理 我画了一个草图,方便大家理解 典型的例子,房东要租房,找到了中介,叫中介帮忙租出去,客户租房直接去找中介,中介来操作租房...
  • HTTP协议 (三) 代理

    千次阅读 2018-08-23 17:46:25
      之前写过一个篇 【HTTP协议详解】 ,这次介绍代理服务器, 代理服务器是HTTP协议中一个重要的组件, 发挥着重要的作用。...1什么是代理服务器 2Fiddler就是个典型的代理 3代理作用一:FQ 4...
  • proxy 代理

    2020-10-21 16:00:13
    Proxy 代理 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”,即对编程语言进行编程。 讲通俗一点就是扩展(增强)了对象,方法(函数)的一些功能 ES6 原生提供 Proxy 构造函数,...
  • 设计模式:代理模式(Proxy)

    万次阅读 2020-04-23 18:27:20
    代理模式:为其他对象提供一种代理以控制对这个对象的访问。 代理模式中的角色: 抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。 具体...
  • 代理

    2019-11-13 22:39:57
    案例:静态代理和动态代理(用invoke访问目标方法)。 意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,...
  • 国外常用代理IP对比【仅供参考】

    万次阅读 2019-04-16 22:00:22
    国外常用代理IP对比【仅供参考】 http://www.it588.cn/vmware/2019-03-22/547.html
  • 正向代理与反向代理的区别【Nginx读书笔记】

    万次阅读 多人点赞 2012-10-11 14:53:05
    正向代理的概念正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代理服务器,...
  • 这4种代理,主要是在代理服务器端的配置不同,导致其向目标地址发送请求时,REMOTE_ADDR, HTTP_VIA,HTTP_X_FORWARDED_FOR三个变量不同。 1、透明代理(Transparent Proxy) REMOTE_ADDR = Proxy IP ...
  • windows中为cmd设置代理

    万次阅读 2016-02-20 17:28:55
    windows中为cmd设置代理
  • Google chrome浏览器设置代理

    万次阅读 2018-07-17 21:15:39
    见图:  点击右上角的三竖点,打开设置 见图二: 点击 高级,如图:  打开代理设置:  局域网设置:  代理服务器,输入代理即可。
  • 如何给 NPM 设置代理

    万次阅读 2012-12-27 10:42:37
    GFW 蛋疼的把 ... 可以运行如下两句命令设置代理,注意代理的地址改为自己实际可用的代理。 npm config set proxy=http://127.0.0.1:8087 npm config set registry=http://registry.npmjs.org
  • 请检查您的代理服务器设置或与网络管理员联系,以确保代理服务器正常运行。如果您认为自己不需要使用代理服务器,请执行以下操作: 依次转到 Chrome 菜单 &gt;“设置”&gt;“显示高级设置…”&gt;“更改...
  • 代理服务器  说到代理服务器,大部分人都应该比较熟悉了。google翻墙用的就是代理服务器。但是提到反向代理服务器可能大部分人就比较陌生,对于一般的代理服务器与反向代理服务器的区别估计也不是那么清楚。 ...
  • Postman设置网络代理

    万次阅读 2018-05-02 11:04:27
    1、什么是网络代理? 在一个基本的网络会话中,一个客户端发送一个请求到服务器,服务器返回一个响应;一个代理服务是一个应用程序或者系统,作为一个中介在你的电脑和互联网之间。客户端和服务器,代理以你的名义向...
  • Spring的两种代理方式:JDK动态代理和CGLIB动态代理

    万次阅读 多人点赞 2017-02-10 14:04:59
    代理模式代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象...
  • 将huashengshu.top设置成自己的代理服务器(域名或ip),以及8888改成代理服务器的端口(下面是我的代理服务器域名和端口,如果人数不多就公开让大家使用,如果我自己使用 的时候发现比较卡了,我会做相应措施) ...
1 2 3 4 5 ... 20
收藏数 1,128,248
精华内容 451,299
关键字:

代理