代理模式

设计模式之代理模式

末鹿安然 提交于 2019-11-30 12:12:55
前言 在生活中,我们经常遇到这样的角色:房产中介、婚介、经纪人、快递、产品代理商等,这些都是代理模式的实际体现,代理对象在客户端和目标对象其一个中介的作用。为什么出现这种模式呢,其实也是单一职责模式的体现,就像一个人,如果做一个工作就比较容易做好,如果一个人同时做多分工作,那就很难做好,容易出错。这时候就是代理模式大显身手的时候了,举一个代理商的例子,比如某公司刚生产出一批新电脑,需要销售,一般都会找很多代理商来代销售(比如某东,某猫),而不是自己去销售,因为如果找代理商来代销售只需要签订代理合同就可以了,而且可以和很多家代理商合作,这些代理商的代理点分布在全国各地,所以可以很容易的推广这个产品,代理商专注销售,生产厂商专注生产,这样就可以明确分工,合作共赢。 定义 为其他对象提供一种代理,以控制对这个对象的访问,代理模式属于结构型设计模式。 1.静态代理 先来看一下结构图(摘自《大话设计模式》) 第一步:编写需要被代理的类(RealSubject)和代理类(Proxy)的公共接口(Subject) /** * 定义了RealSubject和Proxy的公共接口,这样,在任何使用RealSubject的地方都可以用Proxy替代 */ public abstract class Subject { public abstract void request(); } 第二步

代理模式之:动态代理

元气小坏坏 提交于 2019-11-30 10:29:44
什么是代理模式 ​ ProxyPattern(即:代理模式),23种常用的面向对象软件的设计模式之一 ​ 代理模式: 静态代理(和装饰者很像), 动态代理 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到 中介 的作用。 什么是动态代理 动态代理它可以直接给某一个目标(被代理 对象)对象(实现了某个或者某些接口)生成一个代理对象,而不需要代理类存在。 ​ 动态代理与代理模式原理是一样的,只是它没有具体的代理类,直接通过 反射 生成了一个代理对象 动态代理的作用 jvm通过反射的方式创建出来的代理对象,对目标方法进行增强 jdk中动态代理的使用 Java.lang.reflect.Proxy类可以直接生成一个代理对象 Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)生成一个代理对象 参数1:ClassLoader loader 代理对象的类加载器 一般使用被代理对象的类加载器 参数2:Class<?>[] interfaces 代理对象的要实现的接口 一般使用的被代理对象实现的接口 参数3:InvocationHandler h (接口)执行处理类

Python中urllib和urllib2库的使用

谁都会走 提交于 2019-11-30 09:27:33
文章目录 urllib和urllib2库的基本使用 urlopen Request User-Agent 添加更多的Header信息 URL编码转换 urllib和urllib2的高级用法 Handler处理器 和 自定义Opener 简单的自定义opener() ProxyHandler处理器(代理设置) Cookie Cookie属性 Cookie应用 cookielib库 和 HTTPCookieProcessor处理器 cookielib 库 1.获取Cookie,并保存到CookieJar()对象中 2. 访问网站获得cookie,并把获得的cookie保存在cookie文件中 3. 从文件中获取cookies,做为请求的一部分去访问 案例:利用cookielib和post登录人人网 异常错误处理 URLError HTTPError 改进版 HTTP响应状态码参考: urllib和urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中抓取出来。在Python中有很多库可以用来抓取网页,我们先学习 urllib2 。 urllib2 是 Python2.7 自带的模块(不需要下载,导入即可使用) urllib2 官方文档: https://docs.python.org/2/library/urllib2.html urllib2 源码:

Nginx--面试基础必会

爱⌒轻易说出口 提交于 2019-11-30 07:47:59
文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 最近一直在更新关于Nginx的系列文章,终于将Nginx的几个关键知识点讲的差不多了。本篇作为Nginx系列的结尾篇幅,主要是列举一些面试时经常问到的Nginx知识点。其实Nginx适合提问的面试点并不多,问来问去基本都是类似的问题。接下来我们一起来看看Nginx基本的面试题。 Nginx的作用 这个问题是入门级知识点,讨论Nginx的用处。我觉得只要几个重要的点都回答到位就可以了,可以考虑这样的一个回答:Nginx是一个高性能web服务器和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。不仅可以实现负载均衡,还可以做接口限流,缓存等功能。 使用Nginx的优势点 Nginx由于使用了epoll和kqueue网路I/O模型,在实际生产环境能够支撑3万左右并发连接。 Nginx内存消耗低。 Nginx跨平台,而且配置相对来说难度较低。 Nginx内置健康检查功能,如果负载均衡其中一个服务器宕机了,则接受到的请求会发送给其他服务器去处理。 支持Gzip压缩,可以添加浏览器本地缓存的Header头。 Nginx支持热部署,可以在不间断服务的情况下平滑进行配置的更改。 Nginx异步接收用户请求,减轻了Web服务器的压力。 Nginx如何实现高并发

Nginx--面试基础必会

喜欢而已 提交于 2019-11-30 07:47:50
文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 最近一直在更新关于Nginx的系列文章,终于将Nginx的几个关键知识点讲的差不多了。本篇作为Nginx系列的结尾篇幅,主要是列举一些面试时经常问到的Nginx知识点。其实Nginx适合提问的面试点并不多,问来问去基本都是类似的问题。接下来我们一起来看看Nginx基本的面试题。 Nginx的作用 这个问题是入门级知识点,讨论Nginx的用处。我觉得只要几个重要的点都回答到位就可以了,可以考虑这样的一个回答:Nginx是一个高性能web服务器和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。不仅可以实现负载均衡,还可以做接口限流,缓存等功能。 使用Nginx的优势点 Nginx由于使用了epoll和kqueue网路I/O模型,在实际生产环境能够支撑3万左右并发连接。 Nginx内存消耗低。 Nginx跨平台,而且配置相对来说难度较低。 Nginx内置健康检查功能,如果负载均衡其中一个服务器宕机了,则接受到的请求会发送给其他服务器去处理。 支持Gzip压缩,可以添加浏览器本地缓存的Header头。 Nginx支持热部署,可以在不间断服务的情况下平滑进行配置的更改。 Nginx异步接收用户请求,减轻了Web服务器的压力。 Nginx如何实现高并发

Nginx 3.使用配置

↘锁芯ラ 提交于 2019-11-30 07:35:12
转 https://www.cnblogs.com/wcwnina/p/9946747.html 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解过,欢迎留言交流。 Nginx能做什么 ——反向代理 ——负载均衡 ——HTTP服务器(动静分离) ——正向代理 以上就是我了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做。 反向代理 反向代理应该是Nginx做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。 下面贴上一段简单的实现反向代理的代码。 保存配置文件后启动Nginx,这样当我们访问localhost的时候,就相当于访问localhost:8080了。 负载均衡 负载均衡也是Nginx常用的一个功能

模式总结之结构型:代理模式 Vs 适配器模式 Vs 门面模式(外观模式)

ⅰ亾dé卋堺 提交于 2019-11-30 07:15:29
三哥们都是结构型模式,长得又有点像,为了深刻区分,写文祭奠一下。 先上UML图 代理模式: 适配器模式: 门面模式(外观模式): 打了例子……呃……举个比方 代理模式: 水浒街,西门庆看上潘金莲,想和她嘿咻嘿咻,但是自己有不能去找潘金莲去说,于是他找到了金牌代理人王婆,王婆就去找潘金莲,经过一番商谈,潘金莲终于答应了西门庆的请求。 适配器模式: 水浒街,西门庆看上潘金莲,想和她嘿咻嘿咻,于是就去潘金莲家,但是潘金莲不在,于是就给王婆穿上潘金莲的衣服,带上面具,假扮成潘金莲,和西门庆嘿咻嘿咻了……(有点恶心啊) 门面模式(外观模式): 水浒街,西门庆想去怡红院嘿咻嘿咻,于是他选好了姑娘,调好了门房,嘿咻之后交完了钱,由退了房。现在怡红院推出门面套餐,只要选门面套餐,就自动选好了最好的房子,最好的姑娘,连房租都可以自动记载账上,西门庆只要嘿咻就可以了。 优缺点 代理模式:优点是协调调用与被调用,实现部分解耦,代理模式能保护对真实对象的访问,代理远程机器可以使得远程机器能无阻碍协调地处理客服端请求。缺点是增加代理层调用流程复杂,可能出错,同时速度可能变慢。 用例子说明是:优点将西门庆与潘金莲隔离开来,保护了潘金莲的名声,同时使西门庆与潘金莲交流顺畅。缺点是多了王婆这一层,传达交流可能会出错,同时要肯定会延迟两人的交流。 适配器模式:优点是将目标类与适配者类解耦,增加了类的透明性

设计模式3——Proxy设计模式

拈花ヽ惹草 提交于 2019-11-30 07:13:38
Proxy代理设计模式是一种控制对象访问的设计模式,类似于网络代理,网络代理机制如下图: Proxy代理设计模式机制如下: 代理模式UML图如下: 代理模式顺序图如下: 客户端程序通过代理程序来访问真正的目标程序,代理程序对外隐藏了目标程序。普通代理设计模式例子代码如下: interface ProxyBase{ public void f(); public void g(); public void h(); } //代理程序 class Proxy implement ProxyBase{ private ProxyBase implementation; public Proxy(){ //目标程序 implementation = new ProxyImplementation(); } public void f(){ implementation.f(); } public void g(){ implementation.g(); } public void h(){ implementation.h(); } } //目标程序 class ProxyImplementation implements ProxyBase{ public void f(){ System.out.println(“ProxyImplementation.f()”); } public

负载均衡

别说谁变了你拦得住时间么 提交于 2019-11-30 06:31:41
1.什么是代理? 代为办理 --> 代理 kexue 2.Nginx正向代理、反向代理? 正向代理: --> 上网 | 路由器替代 | kexue上网 反向代理: 正向与反向代理的区别 区别在于形式上服务的 "对象" 不一样 正向代理代理的对象是客户端,为客户端服务 反向代理代理的对象是服务端,为服务端服务 3.Nginx代理支持哪些协议、常用的是哪些? 反向代理模式 Nginx反向代理模块 http、websocket、https ngx_http_proxy_module fastcgi ngx_http_fastcgi_module uwsgi ngx_http_uwsgi_module grpc ngx_http_v2_module 4.Nginx反向代理语法? 5.Nginx反向代理示例? 1.如果后端监听80端口,会不会出现问题? 2.后端主机获取的客户端IP是否是真实的? 3.代理向后端请求时,走的http1.0协议? 代理配置 [root@lb01 conf.d]# cat proxy_web.oldxu.com.conf server { listen 80; server_name web.oldxu.com; location / { proxy_pass http://10.0.0.7:80; proxy_http_version 1.1; proxy

SSH框架之Spring第三篇

自闭症网瘾萝莉.ら 提交于 2019-11-30 06:31:12
1.1 AOP概述 1.1.1 什么是AOP? AOP : 全称是Aspect Oriented Progamming既 : 面向切面编程.通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强. 1.1.2 AOP的作用及优势 作用 : 在程序运行期间,不修改源码对已有方法进行增强. 优势 : 减少重复代码,提高开发效率,维护方便. 1.1.3 AOP的实现方式 : 使用动态代理技术 1.2.2.1 动态代理的特点 : 字节码随用随创建,随用随加载. 它与静态代理的区别也在于此.因为静态代理是字节码一上来就创建好,并完成加载. 装饰着模式就是静态代理的一种体现. 1.2.2.2 动态代理常用的有两种方式 基于接口的动态代理 提供者 : JDK官方的Proxy类. 要求 : 被代理来最少实现一个接口. 基于子类的动态代理 提供者 : 第三方的CGLib,如果报asmxxxx异常,需要导入asm.jar. 要求 : 被代理类不能用final修饰的类(最终类). 1.3 Spring中的AOP 1.3.1 关于代理的选择 在Spring中,框架根据目标类实现了接口决定采用哪种动态代理的方式. 1.3.2 AOP相关术语 Joinpoint(连接点)