代理 订阅
代理服务器(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协议访问外部网站。
收起全文
精华内容
参与话题
问答
  • 免费IP代理

    万次阅读 多人点赞 2019-04-29 10:34:34
    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...
    展开全文
  • 代理的三种实现方式

    千次阅读 2018-07-23 18:05:34
    代理模式 代理(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();
    	}
    
    }
    

    需要导入的包

     

     

     

    展开全文
  • C++ 代理模式

    千次阅读 2017-11-14 17:50:43
    代理模式(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!

    展开全文
  • 代理模式(proxy)

    万次阅读 2018-08-29 11:07:42
    代理模式是一个大类,而且会经常用到,它包含了远程代理,虚拟代理,防火墙代理等,当然还有动态代理了,学过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();
    	}
    }
    

     

    展开全文
  • HTTP协议 (三) 代理

    千次阅读 2018-08-23 17:35:31
      之前写过一个篇 【HTTP协议详解】 ,这次介绍代理服务器, 代理服务器是HTTP协议中一个重要的组件, 发挥着重要的作用。...1什么是代理服务器 2Fiddler就是个典型的代理 3代理作用一:FQ 4...
  • 国外常用代理IP对比【仅供参考】

    万次阅读 2019-04-16 22:00:22
    国外常用代理IP对比【仅供参考】 http://www.it588.cn/vmware/2019-03-22/547.html
  • 代理模式

    2020-11-16 15:47:20
    代理模式 通过代理对象访问目标对象,在不改变目标对象的情况下,对目标对象进行方法增强. 代理主要分以下三种情况: 静态代理 JDK动态代理 使用cglib库实现动态代理 静态代理 1.定义一个接口 2.实现类 3.代理类 代码...
  • 代理

    2020-07-29 21:36:16
    文章目录代理静态代理Java SDK 动态代理cglib 动态代理两动态代理的比较 代理 静态代理 代理背后一般至少有一个实际对象,代理的外部功能和实际对象一般是一样的,用户与代理打交道,不直接接触实际对象。虽然外部...
  • 浅谈代理模式

    2020-10-30 09:14:34
    在这里我们先看下百度上对代理模式的定义 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象...
  • 代理模式的使用总结

    万次阅读 多人点赞 2020-04-20 14:14:37
    一、代理模式 二、静态代理 (一)静态代理 (二)静态代理简单实现 三、动态代理 (一)动态代理 (二)动态代理简单实现 四、动态代理原理分析 五、InvocationHandler接口和Proxy类详解 六、JDK动态代理...
  • 轻松学,Java 中的代理模式及动态代理

    万次阅读 多人点赞 2017-06-29 22:08:55
    前几天我写了《秒懂,Java 注解 (Annotation)你可以这样学》,因为注解其实算反射技术中的一部分,然后我想了一下,反射技术中还有个常见的概念就是动态代理,于是索性再写一篇关于动态代理的博文好了。...
  • 秒懂Java代理与动态代理模式

    万次阅读 多人点赞 2018-06-30 17:08:23
    什么是代理模式?解决什么问题(即为什么需要)?什么是静态代理?什么是动态代理模式?二者什么关系?具体如何实现?什么原理?如何改进?这即为我们学习一项新知识的正确打开方式,我们接下来会以此展开,让你秒懂...
  • JAVA设计模式--代理模式(静态)

    万次阅读 2016-07-06 18:51:17
    一、什么是代理模式 二、静态代理模式的结构 三、静态代理模式应用举例 应用一 应用二 四、代理模式的应用场景 五、静态代理模式的特点 一、什么是代理模式 代理(Proxy)模式为其他对象提供一种代理以控制...
  • /// 装饰器模式实现静态代理 /// AOP 在方法前后增加自定义的方法 /// </summary> public class DecoratorAOP { public static void Show() { User user = new User() { Name = "看看看看", Password = ...
  • 深入理解代理模式:静态代理与JDK动态代理

    千次阅读 多人点赞 2018-03-01 00:22:11
     代理模式为其他对象提供了一种代理以控制对这个对象的访问,具体实现包括两大类:静态代理和动态代理。Java动态代理机制的出现使得Java开发人员只需要简单地指定一组接口及委托类对象便能动态地获得代理类,并且其...
  • 四、动态代理模式的特点 参考文章 一、什么是动态代理 在静态代理(Static Proxy)模式中,代理类都是真实存在的,由程序员提前创建好的java类,是静态的,每一个代理类在编译之后都会生成一个.class字节码文件,...
  • 标题:Java代理模式详解及案例分析:静态代理/动态代理 我们以几个问题,来开始我们今天的学习,如果下面几个问题,你都能说出个一二,那么恭喜你,你已经掌握了这方面的知识。 1,什么是代理模式? 2,Java中,...
  • 设计模式-代理模式

    千次阅读 2018-08-18 10:52:06
    什么是代理模式    代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。    这句话看起来比较抽象,不太好理解,举个现实的例子:外卖。在有饿了么之类的外卖出现前,我们如果点了外卖很多时候...
  • 为其他对象提供一种代理以控制这个对象的访问,在某些情况下一个对象不能直接访问那个对象时,代理就起到了客户端和被代理对象(委托类)中介作用。 代理类和委托类都有同样接口。 好处:可以不用动原来类的逻辑,...
  • Java设计模式-之代理模式(动态代理)

    千次阅读 2017-09-10 15:47:17
    1、什么叫代理模式: &amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;...
  • java设计模式-代理模式

    万次阅读 2019-04-10 13:54:28
    需求(干什么):对明星唱歌的业务流程进行代理,而明星唱歌还是交由明星自己唱歌,这个流程把唱歌分成2部分了,1:歌手尽管唱歌,2:代理公司负责打杂(面谈,签合同,订票,收钱),对被代理的歌手来说,他解放了,相当于增强了,...
  • 文章目录1 引子2 业务场景介绍3 静态代理模式4 装饰器模式5 动态代理模式 1 引子 看过上篇文章《【Mybatis源码探索】 — Mybatis查询过程核心源码解读 — 先聊聊selectOne方法》对Executor和StatementHandler的...
  • 面试中关于Spring AOP和代理模式的那些事

    千次阅读 多人点赞 2018-12-09 23:00:16
    我们知道,Spring 中 AOP 是一大核心技术,也是面试中经常会被问到的问题,最近我在网上也看到很多面试题,其中和 Spring AOP 相关的就有...谈谈你对代理模式的理解? 静态代理和动态代理有什么区别? 如何实现动态...
  • 思考:以常见的增删改查为例,在执行增删改的时候我们需要开启事务,执行完成后...于是就出现了代理模式的概念,那什么是代理模式呢? 1、什么是代理模式 简单来说:代理就是对目标方法进行增强。 什么意思呢?...
  • Java代理模式及其应用

    千次阅读 多人点赞 2017-07-03 16:01:17
    代理根据代理类的产生方式和时机分为静态代理和动态代理两种。代理类不仅可以有效的将具体的实现与调用方进行解耦,通过面向接口进行编码完全将具体的实现隐藏在内部,而且还可以在符合开闭原则的前提下,对目标类...
  •  远程代理(Remote Proxy)是一种常用的代理模式,它使得客户端程序可以访问在远程主机上的对象,远程主机可能具有更好的计算性能与处理速度,可以快速响应并处理客户端的请求。远程代理可以将网络的细节隐藏起来,...
  • 设计模式:代理模式(Proxy)

    万次阅读 2016-03-29 21:38:09
    代理模式:为其他对象提供一种代理以控制对这个对象的访问。 代理模式中的角色: 抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。 具体...
  • 1:强制代理模式 普通代理模式和强制代理模式代理模式的其中俩个部分。对于这俩个代理模式,我们采用一个类似事情解释下:在网络上的代理服务器分透明代理和普通代理;对于透明代理来说,字如其意,就是这个代理...
  • 代理模式与动态代理模式

    千次阅读 多人点赞 2015-03-19 09:35:14
    1、代理模式 所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用。 代理模式给某...
  • java 代理模式详解

    千次阅读 2018-08-03 20:34:58
    代理也称“委托”,分为静态代理和动态代理,代理模式也是常用的设计模式之一,具有方法增强、高扩展性的设计优势。 代理的设计理念是限制对象的直接访问,即不能通过 new 的方式得到想要的对象,而是访问该对象的...

空空如也

1 2 3 4 5 ... 20
收藏数 1,205,125
精华内容 482,050
关键字:

代理