代理模式

初识——Proxy

风格不统一 提交于 2019-11-26 12:43:28
无处不在的模式——Proxy 最近在看《设计模式之禅》,看到代理模式这一章的时候 发现自己在写spring项目的时候其实很多时候都用到了代理 无论是依赖注入、AOP还是其他,可以说是无处不在。 于是自己便自己摸索写了一些小例子,当然也参考了网上其他博主的博客,毕竟小白一枚hhhhhh 进入正题:      图1-1:代理Proxy 代理模式现在主流的有两大类:1、JDK代理 2、CGLB代理 (JDK静态代理就不说了,网上很多都有,主要我觉得现在面向企业项目,静态代理局限性有点大,对于我而言可能就只是去了解了一下,而并没有说想要去深入这个) Th1:JDK动态接口代理(需要实现InvocationHandler接口中的invoke(…)方法,必须实现某个接口) public class MyJdkProxy implements InvocationHandler { // 目标对象 public Object target; // 初始化传入代理对象 public MyJdkProxy(Object target){ this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out

初识代理——Proxy

社会主义新天地 提交于 2019-11-26 12:41:24
无处不在的模式——Proxy 最近在看《设计模式之禅》,看到代理模式这一章的时候,发现自己在写spring项目的时候其实很多时候都用到了代理,无论是依赖注入、AOP还是其他,可以说是无处不在。 于是自己便自己摸索写了一些小例子,当然也参考了网上其他博主的博客,毕竟小白一枚hhhhhh 进入正题:                                 图1-1:代理Proxy 代理模式 现在主流的有两大类:1、JDK代理 2、CGLB代理 (JDK静态代理就不说了,网上很多都有,主要我觉得现在面向企业项目,静态代理局限性有点大,对于我而言可能就只是去了解了一下,而并没有说想要去深入这个) Th1:JDK动态接口代理(需要实现InvocationHandler接口中的invoke(...)方法,必须实现某个接口) public class MyJdkProxy implements InvocationHandler { // 目标对象 public Object target; // 初始化传入代理对象 public MyJdkProxy(Object target){ this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args)

13.代理模式

我只是一个虾纸丫 提交于 2019-11-26 12:31:01
一、角色 主题接口(Subject):定义代理类和真实主题的公共对外方法 真实主题(RealSubject):真正实现业务逻辑的类 代理类(ProxyHandler):用来代理和封装真实主题 二、适用场景 代理对象存在的价值主要用于拦截对真实业务对象的访问 代理对象应该具有和目标对象(真实业务对象)相同的方法,即实现共同的接口或继承于同一个类 代理对象应该是目标对象的增强,否则我们就没有必要使用代理了 三、实例 图1是一个播放电影的实例,电影被委托给电影院进行播放,其中Movie是主题接口,RealMovie是真实主题,Cinema是代理类,客户端通过调用Cinema,Cinema的play方法实际调用的是RealMovie的paly方法,并加入了增强逻辑,图中的例子是一种静态代理模式,下面代码示例中还给出了在JAVA中利用jdk的Proxy对象的newProxyInstance方法实现动态代理的方式 代码地址: https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/patterns/proxy 图-1 来源: https://www.cnblogs.com/zhongj/p/11320191.html

设计模式-代理模式

爷,独闯天下 提交于 2019-11-26 10:31:45
#设计模式-代理模式 * 增强对象的功能: * 设计模式:一些通用的解决固定问题的方式 1. 装饰模式 2. 代理模式 * 概念: 1. 真实对象:被代理的对象 2. 代理对象: 3. 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的 * 实现方式: 1. 静态代理:有一个类文件描述代理模式 2. 动态代理:在内存中形成代理类 * 实现步骤: 1. 代理对象和真实对象实现相同的接口 2. 代理对象 = Proxy.newProxyInstance(); 3. 使用代理对象调用方法。 4. 增强方法 * 增强方式: 1. 增强参数列表 2. 增强返回值类型 3. 增强方法体执行逻辑 具体案例: 购买笔记本案例 1. 定义接口SaleComputer类,用于实现方法 public interface SaleComputer { public String sale(double money); public void show(); } 2. 定义一个实体Lenovo类实现方法,为真实类 package cn.itcast.proxy; /* 真实类 * */ public class Lenovo implements SaleComputer { @Override public String sale(double money) { System.out

设计模式课时十------代理模式

好久不见. 提交于 2019-11-26 05:33:21
代理模式 代理模式可以分为:动态代理 和 静态代理 代理模式按功能可以分为: 标的类,标的接口,拦截器,耦合类 静态代理非常容易理解,这里不做过多解释,直接上代码实例: /** * 静态代理 -----你求局长办事,但是 你 见不到局长, 这时候你需要找局长的代理人---秘书 * 抽象类 :Subject * 具体抽象角色(局长) :RealSubject * 代理角色(秘书) :ProxySubject * 你: :staticProxy * 秘书-局长(关系) :Subject */ package Abstract . Proxy ; interface Subject { void request ( ) ; } class RealSubject implements Subject { @Override public void request ( ) { System . out . println ( "局长:给你办了。。。。" ) ; } } class ProxySubject implements Subject { private RealSubject real ; public ProxySubject ( RealSubject realSubject ) { this . real = realSubject ; } @Override public

Spring入门。

穿精又带淫゛_ 提交于 2019-11-26 03:56:28
程序的耦合和解耦。 1、问题引入。 在使用jdbc和数据库交互时。注册驱动:DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver()); 如果把mysql的依赖(jar包)删掉,那么程序在编译期就会出现错误。也就是说当前类,依赖于Driver类。 2、程序的耦合。 耦合:简单来说,就是程序间的依赖关系。包括:类之间的依赖、方法之间的依赖。 解耦:降低程序间的依赖关系。 实际开发中应做到:编译期不依赖,运行时才依赖。 之前注册驱动时,一直用的是 Class.forName("com.mysql.cj.jdbc.Driver")。它依赖的只是一个字符串。 所以, 解耦的思路:   * 第一步:使用反射来创建对象,而 避免使用new关键字。     问题:这样的话,字符串写死了,如果以后用其他数据库驱动,需要改源码。   * 第二部:通过读取配置文件来获取要创建的对象全类名。 3、另一个问题。 通过分析,在之前的三层架构中,各个层之间的调用也有很大的耦合问题。 解决方案:工厂模式解耦。   创建一个 创建Bean对象的工厂。   Bean:代表可重用组件的含义。   JavaBean:用Java编写的可重用组件。JavaBean > 实体类。   第一:需要一个配置文件来配置service和dao。配置的内容:唯一标识=全类名

由这个代理对象控制对该对象的访问

旧时模样 提交于 2019-11-26 01:06:28
什么是代理模式 代理模式就是为一个对象提供一个代理对象,由这个代理对象控制对该对象的访问。 理解代理模式,可以对照生活中的一些具体例子,比如房产中介、二手车交易市场、经纪人等。 为什么要用代理模式 通过使用代理模式,我们避免了直接访问目标对象时可能带来的一些问题,比如:远程调用,需要使用远程代理来帮我们处理一些网络传输相关的细节逻辑;可能需要基于某种权限控制对目标资源的访问,可以使用保护代理等。 总的来说,通过是用代理模式,我们可以控制对目标对象的访问,可以在真实方法被调用前或调用后,通过代理对象加入额外的处理逻辑。 代理模式分类 代理模式分为静态代理和动态代理。动态代理根据实现不同又可细分为JDK动态代理和cglib动态代理。 静态代理 是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。 动态代理 是在实现阶段不用关心代理类,而在运行时动态生成代理类的。 静态代理 以房哥买房子为例,用代码实现静态代理。 来源: https://www.cnblogs.com/55hyh/p/11932898.html

设计模式之代理模式

混江龙づ霸主 提交于 2019-11-26 00:53:52
什么是代理模式 代理模式就是为一个对象提供一个代理对象,由这个代理对象控制对该对象的访问。 理解代理模式,可以对照生活中的一些具体例子,比如房产中介、二手车交易市场、经纪人等。 为什么要用代理模式 通过使用代理模式,我们避免了直接访问目标对象时可能带来的一些问题,比如:远程调用,需要使用远程代理来帮我们处理一些网络传输相关的细节逻辑;可能需要基于某种权限控制对目标资源的访问,可以使用保护代理等。 总的来说,通过是用代理模式,我们可以控制对目标对象的访问,可以在真实方法被调用前或调用后,通过代理对象加入额外的处理逻辑。 代理模式分类 代理模式分为静态代理和动态代理。动态代理根据实现不同又可细分为JDK动态代理和cglib动态代理。 静态代理 是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。 动态代理 是在实现阶段不用关心代理类,而在运行时动态生成代理类的。 静态代理 以房哥买房子为例,用代码实现静态代理。 1、首先建立一个Seller接口 public interface Seller { void sell(); } 2、创建实现类,房哥,有一个方法,就是买房子 public class FangGe implements Seller{ @Override public void

Spring常见面试题总结(超详细回答)

让人想犯罪 __ 提交于 2019-11-26 00:47:01
1、Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? (1)spring属于低侵入式设计,代码的污染极低; (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性; (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 (4)spring对于主流的应用框架提供了集成支持。 3、Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系

Squid缓存代理服务器

懵懂的女人 提交于 2019-11-25 22:25:54
一、关于缓存代理 1、代理的工作机制 作为应用层的代理服务软件,Squid主要提供缓存加速和应用层过滤控制的功能。当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机需要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机。 HTTP代理的缓存加速对象主要是文字、图像等静态Web元素。使用缓存机制后,当客户机在不同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向Internet重复提交Web请求的过程,提高了客户机的Web访问响应速度。 由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实IP地址,起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人”的角色,所以有机会针对要访问的目标、客户机的地址、访问的时间端进行过滤控制。 2、代理的基本类型 根据实现的方式不同,代理服务可分为传统代理和透明代理两个常见的代理服务。 1)传统代理 也就是普通的代理服务,首先必须在客户机的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理服务来访问网络。对于网页浏览器