代理模式

设计模式——代理模式

不羁的心 提交于 2020-03-21 09:18:05
基本原理: //源接口 public interface Sourceable { public void method(); } //实现接口类 public class Source implements Sourceable{ @Override public void method() { // TODO Auto-generated method stub System.out.println("源方法"); } } //代理对象实现类——将实现类 封装到 代理实现类,同时实现同一个接口 public class Proxy implements Sourceable{ private Sourceable source; public Proxy(Sourceable source) { this.source = source; } @Override public void method() { // TODO Auto-generated method stub System.out.println("before invoke"); source.method(); System.out.println("after invoke"); } } //测试 public class Demo { public static void main(String[]

Java静态代理

别来无恙 提交于 2020-03-21 06:36:57
静态代理   静态代理和JDK代理一样都是通过实现接口的方式实现代理模式  代理接口类  public interface mainFunction { public String doOne(); public String doTwo(); }  业务类(实现代理接口)  public class Services implements mainFunction { public String doOne() { // TODO Auto-generated method stub System.out.println("this is doOne function"); return "This is doOne"; } public String doTwo() { // TODO Auto-generated method stub System.out.println("this is doTwo function"); return "This is doTwo"; } }  静态代理类(实现代理接口) public class Proxy implements mainFunction { private Services services; public Proxy(Services services){ super(); this.services

HttpClient 教程 (二)

无人久伴 提交于 2020-03-20 23:48:07
第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制。而连接操作的很多方面可以使用一些参数来控制。 2.1 连接参数 这些参数可以影响连接操作: 'http.socket.timeout': 定义了套接字的毫秒级超时时间(SO_TIMEOUT),这就是等待数据,换句话说,在两个连续的数据包之间最大的闲置时间。如果超时时间是0就解释为是 一个无限大的超时时间。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置,那么读取操作就不会超时(无限大的超 时时间)。 'http.tcp.nodelay': 决定了是否使用Nagle算法。Nagle算法视图通过最小化发送的分组数量来节省带宽。当应用程序希望降低网络延迟并提高性能时,它们可以关闭 Nagle算法(也就是开启TCP_NODELAY)。数据将会更早发送,增加了带宽消耗的成文。这个参数期望得到一个 java.lang.Boolean类型的值。如果这个参数没有被设置,那么TCP_NODELAY就会开启(无延迟)。 'http.socket.buffer- size':决定了内部套接字缓冲使用的大小,来缓冲数据同时接收/传输HTTP报文。这个参数期望得到一个java.lang.Integer类型的 值。如果这个参数没有被设置

HttpClient 教程 (二)

纵饮孤独 提交于 2020-03-20 23:47:50
第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制。而连接操作的很多方面可以使用一些参数来控制。 2.1 连接参数 这些参数可以影响连接操作: 'http.socket.timeout':定义了套接字的毫秒级超时时间(SO_TIMEOUT),这就是等待数据,换句话说,在两个连续的数据包之间最大的闲置时间。如果超时时间是0就解释为是一个无限大的超时时间。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置,那么读取操作就不会超时(无限大的超时时间)。 'http.tcp.nodelay':决定了是否使用Nagle算法。Nagle算法视图通过最小化发送的分组数量来节省带宽。当应用程序希望降低网络延迟并提高性能时,它们可以关闭Nagle算法(也就是开启TCP_NODELAY)。数据将会更早发送,增加了带宽消耗的成文。这个参数期望得到一个java.lang.Boolean类型的值。如果这个参数没有被设置,那么TCP_NODELAY就会开启(无延迟)。 'http.socket.buffer-size':决定了内部套接字缓冲使用的大小,来缓冲数据同时接收/传输HTTP报文。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置

HttpClient 教程 (二)

ⅰ亾dé卋堺 提交于 2020-03-20 23:47:05
第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制。而连接操作的很多方面可以使用一些参数来控制。 2.1 连接参数 这些参数可以影响连接操作: 'http.socket.timeout':定义了套接字的毫秒级超时时间(SO_TIMEOUT),这就是等待数据,换句话说,在两个连续的数据包之间最大的闲置时间。如果超时时间是0就解释为是一个无限大的超时时间。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置,那么读取操作就不会超时(无限大的超时时间)。 'http.tcp.nodelay':决定了是否使用Nagle算法。Nagle算法视图通过最小化发送的分组数量来节省带宽。当应用程序希望降低网络延迟并提高性能时,它们可以关闭Nagle算法(也就是开启TCP_NODELAY)。数据将会更早发送,增加了带宽消耗的成文。这个参数期望得到一个java.lang.Boolean类型的值。如果这个参数没有被设置,那么TCP_NODELAY就会开启(无延迟)。 'http.socket.buffer-size':决定了内部套接字缓冲使用的大小,来缓冲数据同时接收/传输HTTP报文。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置

HttpClient 教程 (二)

 ̄綄美尐妖づ 提交于 2020-03-20 23:46:45
转自:http://www.cnblogs.com/loveyakamoz/archive/2011/07/21/2112832.html 第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制。而连接操作的很多方面可以使用一些参数来控制。 2.1 连接参数 这些参数可以影响连接操作: 'http.socket.timeout':定义了套接字的毫秒级超时时间(SO_TIMEOUT),这就是等待数据,换句话说,在两个连续的数据包之间最大的闲置时间。如果超时时间是0就解释为是一个无限大的超时时间。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置,那么读取操作就不会超时(无限大的超时时间)。 'http.tcp.nodelay':决定了是否使用Nagle算法。Nagle算法视图通过最小化发送的分组数量来节省带宽。当应用程序希望降低网络延迟并提高性能时,它们可以关闭Nagle算法(也就是开启TCP_NODELAY)。数据将会更早发送,增加了带宽消耗的成文。这个参数期望得到一个java.lang.Boolean类型的值。如果这个参数没有被设置,那么TCP_NODELAY就会开启(无延迟)。 'http.socket.buffer-size':决定了内部套接字缓冲使用的大小,来缓冲数据同时接收/传输HTTP报文

HttpClient 教程 (二)

强颜欢笑 提交于 2020-03-20 23:46:15
第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制。而连接操作的很多方面可以使用一些参数来控制。 2.1 连接参数 这些参数可以影响连接操作: 'http.socket.timeout':定义了套接字的毫秒级超时时间(SO_TIMEOUT),这就是等待数据,换句话说,在两个连续的数据包之间最大的闲置时间。如果超时时间是0就解释为是一个无限大的超时时间。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置,那么读取操作就不会超时(无限大的超时时间)。 'http.tcp.nodelay':决定了是否使用Nagle算法。Nagle算法视图通过最小化发送的分组数量来节省带宽。当应用程序希望降低网络延迟并提高性能时,它们可以关闭Nagle算法(也就是开启TCP_NODELAY)。数据将会更早发送,增加了带宽消耗的成文。这个参数期望得到一个java.lang.Boolean类型的值。如果这个参数没有被设置,那么TCP_NODELAY就会开启(无延迟)。 'http.socket.buffer-size':决定了内部套接字缓冲使用的大小,来缓冲数据同时接收/传输HTTP报文。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置

Static_Porxy(静态代理模式)

僤鯓⒐⒋嵵緔 提交于 2020-03-20 08:42:23
Static Porxy(静态代理模式) 要求: 1、要求有:真是角色和代理角色两个对象; 2、真实角色 和 代理角色要实现同一个接口; 3、代理角色要持真实角色的引用; package com.xu.threads; public class StaticPorxy { //静态代理模式 public static void main(String[] args) { WeddingMarry weddingMarry = new WeddingMarry(new You()); weddingMarry.HappyMarry(); } } interface Marry{ // 接口 void HappyMarry(); } class You implements Marry{ // 真实角色 You @Override public void HappyMarry() { System.out.println("结婚"); } } class WeddingMarry implements Marry{ //代理对象 WeddingMarry private You you; // 持有真实角色的引用 public WeddingMarry(You you) { this.you = you; } @Override public void HappyMarry() {

Spring Aop 代理

旧街凉风 提交于 2020-03-20 06:43:33
AOP 面向切面编程 底层就是 动态代理模式 代理模式是java中常用的设计模式。 特点为: 1 委托类和代理类有相同的接口,或共同的父类(保证使用一样的方法) 2 代理类为委托类负责处理消息,并将消息转发给委托类。 3 代理类并不是真正的实现者而是通过调用委托类的方法来实现功能。 代理 分为 静态代理和动态代理。 静态代理: 由程序员或者特定的工具自动生成了源代码,在程序运行之前 .class文件已经存在了。 静态代理实现时:需要一个接口和两个实现类(一个做目标对象,一个为代理对象)。 动态代理:在程序运行期间,通过反射的方法动态的创建出来的! 动态代理分为 GDK动态代理 和 Cglib动态代理。 GDK动态代理可以实现接口。 Cglib可以实现父类和接口。 静态代理 接口 public interface Subject { public void request(); } 实现类(目标对象) public class RealSubject implements Subject { public void request() { System.out.println("okokok"); } } 实现类(代理对象) public class ProxySubject implements Subject { public ProxySubject() { } private

spring 理解Spring AOP 一个简单的约定游戏

佐手、 提交于 2020-03-20 06:38:21
  应该说AOP原理是Spring技术中最难理解的一个部分,而这个约定游戏也许会给你很多的帮助,通过这个约定游戏,就可以理解Spring AOP的含义和实现方法,也能帮助读者更好地运用Spring AOP到实际的编程当中,这对于正确理解Spring AOP是十分重要的 约定规则   代码清单:定义Interceptor接口 package com.ssm.chapter11.game; public interface Interceptor { public void before(Object obj); public void after(Object obj); public void afterReturning(Object obj); public void afterThrowing(Object obj); }   这里是一个拦截接口,可以对它创建实现类。如果使用过Spring AOP,你就会发现笔者的定义和Spring AOP定义的消息是如此相近。   代码清单:ProxyBeanFactory的getBean方法 package com.ssm.chapter11.game; public class ProxyBeanFactory { public static <T> T getBean(T obj, Interceptor interceptor) {