代理模式

java代理模式及动态代理类

人走茶凉 提交于 2019-11-27 15:14:43
 1. 代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式一般涉及到的角色有: 抽象角色 :声明真实对象和代理对象的共同接口; 代理角色 :代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。 真实角色 :代理角色所代表的真实对象,是我们最终要引用的对象。(参见文献1) 以下以《 Java 与模式》中的示例为例: 抽象角色: abstract public class Subject { abstract public void request(); } 真实角色:实现了 Subject 的 request() 方法。 public class RealSubject extends Subject { public RealSubject() { } public void request() { System.out.println("From real subject."); } } 代理角色: public class ProxySubject extends Subject

爬虫之Handler处理器和自定义Opener

我是研究僧i 提交于 2019-11-27 12:54:16
一、Handler处理器和自定义Opener opener是 request.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构建好的)。 但是基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能: 使用相关的 Handler处理器 来创建特定功能的处理器对象; 然后通过 request.build_opener()方法使用这些处理器对象,创建自定义opener对象; 使用自定义的opener对象,调用open()方法发送请求。 如果程序里所有的请求都使用自定义的opener,可以使用request.install_opener() 将自定义的 opener 对象 定义为 全局opener,表示如果之后凡是调用urlopen,都将使用这个opener(根据自己的需求来选择) 二、Handler处理器和自定义Opener from urllib import request # 构建一个HTTPHandler 处理器对象,支持处理HTTP请求 http_handler = request.HTTPHandler() # 调用request.build_opener()方法,创建支持处理HTTP请求的opener对象 opener = request

设计模式(单例模式、工厂、简单工厂、抽象工厂、代理模式、装饰者模式、观察者模式、适配器模式)

☆樱花仙子☆ 提交于 2019-11-27 12:50:55
一、单例模式 二、代理模式 一、单例模式 1.单例模式的定义 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 2.单例模式的特点 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 3.单例模式的应用 在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。 这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态。 4.单例模式的Java代码 单例模式分为懒汉式(需要才去创建对象)和饿汉式(创建类的实例时就去创建对象)。 5.饿汉式 属性实例化对象 //饿汉模式:线程安全,耗费资源。 public class HugerSingletonTest { //该对象的引用不可修改 private static final HugerSingletonTest ourInstance = new HugerSingletonTest(); public static HugerSingletonTest getInstance() {

http协议详细解析

六眼飞鱼酱① 提交于 2019-11-27 11:40:45
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 一、HTTP协议详解之URL篇 http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议

GOF23设计模式-结构型(7种)

醉酒当歌 提交于 2019-11-27 10:51:28
文章目录 二、结构型模式 1. 外观模式(门面模式) 定义 适用场景 优点 缺点 源码 外观模式和中介者模式 外观模式和单例模式 外观模式和抽象工厂模式 2. 装饰者模式 定义 适用场景 优点 缺点 源码 装饰者模式和代理模式 装饰者和适配器模式 3. 适配器模式 定义 适用场景 优点 缺点 扩展 源码 适配器模式和外观模式 4. 享元模式 定义 适用场景 优点 缺点 内部状态和外部状态 源码 享元模式和代理模式 享元模式和单例模式 5. 组合模式 定义 适用场景 优点 缺点 源码 组合模式和访问者模式 6. 桥接模式 定义 适用场景 优点 缺点 源码 桥接和组合模式 桥接模式和适配器模式 7. 代理模式 定义 适用场景 优点 缺点 静态代理和动态代理 源码 源码链接:https://github.com/ouyangxizhu/design_pattern.git 二、结构型模式 1. 外观模式(门面模式) com.ouyangxizhu.design.pattern.structural.facade 定义 提供了一个结构来访问子系统中的一群接口。 这个外观结构 封装 了子系统之间的调用逻辑,调用顺序。比如购物,用户只关注我能不能买成功(下单功能),至于怎么减库存,怎么生成订单,怎么物流配送都不需要知道。 适用场景 当子系统越来越复杂,增加外观模式提供简单接口调用。

代理模式【java版】

我们两清 提交于 2019-11-27 10:36:04
应用场景: 安全代理: 控制对原对象的 访问权限 注: 之所以把权限控制放在"代理类"中,而不是放在原对象中,主要依据 "单一性原则" . 远程代理: 网络通讯 时,将加密,解密,打包,解包这些操作一起封装在"代理对象"使得客户端 调用时,就像是在访问本地数据. eg: WebService的工作原理 虚拟代理: 当存在实例化需要很长时间的成员对象时,当需要调用到与该对象相关的方法时才 声明该对象,并实例化. 智能指引: 未使用过 基本特点: 代理拥有 实际执行者 的实例,代理的每一个函数,直接调用实际执行者对应的函数. 一、普通代理: ( 安全代理 ) 1.原始接口 //原始类方法接口public interface Subject { public void readFile(String fileName); public void writeFile(String fileName);} 2.原始类 //原始类:实现原始接口中的方法public class RealSubject implements Subject { public void readFile(String fileName) { System.out.println("进行读取文件操作!"); } public void writeFile(String fileName) { System.out

Spring AOP 原理的理解

拟墨画扇 提交于 2019-11-27 09:42:00
  >AOP基本概念   1)通知(Advice):织入到目标类连接点上的一段程序代码。通知分为五种类型:   - Before:在方法被调用之前调用   - After:在方法完成后调用通知,无论方法是否执行成功   - After-returning:在方法成功执行之后调用通知   - After-throwing:在方法抛出异常后调用通知   - Around:通知了好、包含了被通知的方法,在被通知的方法调用之前后调用之后执行自定义的行为   2)切点(Pointcut):AOP通过“切点”定位特定的连接点   3)连接点(Joinpoint):程序执行的某个特定位置:如类开始初始化前、类初始化后、类某个方法调用前、调用后、方法抛出异常后。这些代码中的特定点,称为“连接点”。   4) 织入(Weaving):织入是将增强添加到目标类具体连接点上的过程。AOP有三种织入方式:   - 编译期织入,这要求使用特殊的Java编译器;   - 类装载期织入,这要求使用特殊的类装载器;   - 动态代理织入,在运行期为目标类添加增强生成子类的方式。   Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。   5)切面(Aspect)切面由切点和通知组成,它既包括了横切逻辑的定义,也包括了连接点的定义   Spring 是切片流程   代理模式  

Nginx用法详解

旧城冷巷雨未停 提交于 2019-11-27 08:43:53
nginx作为一个高性能的web服务器,想必大家垂涎已久,蠢蠢欲动,想学习一番了吧,语法不多说,网上一大堆。下面博主就nginx的非常常用的几个功能做一些讲述和分析,学会了这几个功能,平常的开发和部署就不是什么问题了。因此希望大家看完之后,能自己装个nginx来学习配置测试,这样才能真正的掌握它。 1. 正向代理 正向代理:内网服务器主动去请求外网的服务的一种行为 光看概念,可能有读者还是搞不明白:什么叫做“正向”,什么叫做“代理”,我们分别来理解一下这两个名词。 正向:相同的或一致的方向 代理:自己做不了的事情或者自己不打算做的事情,委托或依靠别人来完成。 借助解释,回归到nginx的概念,正向代理其实就是说客户端无法主动或者不打算完成主动去向某服务器发起请求,而是委托了nginx代理服务器去向服务器发起请求,并且获得处理结果,返回给客户端。 从下图可以看出:客户端向目标服务器发起的请求,是由代理服务器代替它向目标主机发起,得到结果之后,通过代理服务器返回给客户端。 举个栗子:广大社会主义接班人都知道,为了保护祖国的花朵不受外界的乌烟瘴气熏陶,国家对网络做了一些“优化”,正常情况下是不能外网的,但作为程序员的我们如果没有谷歌等搜索引擎的帮助,再销魂的代码也会因此失色,因此,网络上也曾出现过一些fan qiang技术和软件供有需要的人使用,如某VPN等

设计模式之GOF23外观模式

☆樱花仙子☆ 提交于 2019-11-27 07:35:38
外观模式 迪米特原则: 一个软件实体应当尽可能少的与其他实体发生相互作用 外观模式核心: 为子系统提供统一的入口, 封装 子系统的复杂性,便于客户端调用 相当于找了个代理帮你做了所有事而你只需要和代理打交道 来源: https://www.cnblogs.com/code-fun/p/11351289.html

nginx反向代理原理及配置详解

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-27 06:17:15
nginx概述 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。 这里主要通过三个方面简单介绍nginx 反向代理 负载均衡 nginx特点 1. 反向代理 关于代理 说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道; 此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户 正向代理 说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理 在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们! 上述这样的代理模式称为正向代理