美文网首页
设计模式之代理模式

设计模式之代理模式

作者: 小螺丝钉cici | 来源:发表于2019-05-08 18:38 被阅读0次

代理模式这种机制可以叫做AOP,在不改变原有代码的基础上,添加或者删除某些方法
例如:
要调用某个jar包中某个类的方法,但是不能改变源码,我们可以采用JDK的动态代理模式,在该方法的前后添加业务逻辑,如记录日志,权限控制等


image.png

概念:为其他对象提供一种代理,以控制对这个对象的访问(例如火车站代售处)。代理对象起到中介作用,可去掉功能服务或增加额外的服务。

几种场景的代理模式:智能引用代理使用的场景最多

image.png

a、远程代理---为不同地理的对象提供局域网代表对象。(类似于客户端和服务器端)
比如:通过远程代理来监控各个店铺的运营情况

image.png

b.虚拟代理---根据需要将资源消耗很大的对象进行延迟,真正需要的时候才进行创建。
比如:网页中 图片的加载,先用一张虚拟的图片进行显示,等图片加载完成后再进行显示

image.png

c.保护代理---控制对象(用户)的访问权限。
比如:用户贴吧的浏览权限,发帖权限,评论权限等等都需要注册才能操作,权限的控制通过保护代理来实现。

image.png

d.智能应用代理---提供对目标对象一些额外的服务。
比如:火车站代售处

image.png

两种实现方式
一、静态代理
1、静态代理:代理和被代理对象在【代理之前】都是【确定】的。他们都实现【相同的接口或者继承相同的抽象类】
(1)继承法:代理类直接【继承】被代理类,实现其原有方法,并添加一些额外功能

image.png

(2)聚合方法:代理类实现【相同的功能接口:很重要,事项相同接口,不同代理也可以进行相互代理】,并在内声明一个被代理类的对象(类似封装),通过内部对象实现其原有方法,并添加额外功能

image.png image.png image.png

1.聚合代理优于继承代理。
在实现功能叠加的情况下,聚合代理通过相互代理可以实现功能重用,而继承代理必须写多个类来实现多功能叠加。
2.但静态代理只能代理一种类型的被代理类,换个类型的就不行了,这需要动态代理

项目实践1:DefaultHttpProxy / HttpProxy

项目实践2: image.png

动态代理:JDK、cglib
动态代理-JDK的动态代理(日志处理)
目的:动态产生代理,实现对【不同类】,【不同方法】的代理

image.png

动态代理实现步骤:

  1. 创建一个实现接口 Invocation Handlerg 的类,它必须实现 invoke 方法
  2. 创建被代理的类以及接口
  3. 调用 Proxy 的静态方法,创建一个代理类
    newproxyinstance (Classloader loader, Classl
    interfaces, Invocationhandler h)
  4. 通过代理调用方法

项目实践:多个支付方式的支付服务模块实现
项目中使用多个支付公司:易宝,汇潮,连连,等等,并且,每个支付公司需要请求多个支付接口(请求支付,查询,回调)。
将每个支付公司的每个支付接口的业务逻辑单独放在一个Hander
(YeePayPayQueryHandler)
通过抽象支付服务代理处理器,找到对应需要请求的支付公司接口的Hander


image.png

CDK动态代理和CGLIB代理的区别:

image.png

动态代理-CGLIB的动态代理
class CglibProxy implements MethodInterceptor
实现 intercept(Object obj,Method m,Object[] args,MethodProxy proxy);方法

项目中的实践:分布式锁的实现


image.png

相关文章

  • 设计模式之代理模式

    设计模式之代理模式 10分钟看懂动态代理设计模式(升级篇)-对这篇动态代理模式的思路整理 仿JDK实现动态代理逻辑...

  • 代理模式

    设计模式之代理模式 什么是代理模式? 指的事代理对象为其他对象提供代理以控制对被...

  • Java设计模式之代理模式

    Java设计模式之代理模式 代理模式 静态代理 动态代理 为什么需要代理 通过代理,我们能够不用知道委托人是谁,而...

  • Java代理模式之JDK动态代理

    了解什么是动态代理模式,可参考Java设计模式之代理模式 简介 JDK动态代理是java.lang.reflect...

  • 设计模式之代理模式2

    设计模式之代理模式运用 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对...

  • 设计模式之代理模式

    设计模式之代理模式 简介 代理模式是结构型设计模式。 当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过...

  • 设计模式之代理模式

    title: 设计模式之代理模式date: 2018-08-15 20:25:42tags: 设计模式 笔记 Ja...

  • java设计模式之代理模式(静态代理)

      今天给大家分享的是java设计模式之代理模式中的静态代理模式,动态代理模式将在后面文章中给出。如有不足,敬请指...

  • Android 代理模式

    Android 设计模式系列文章 Android 23种设计模式 前言 代理模式可能是我们平时开发中最常见的模式之...

  • 设计模式之代理模式

    设计模式之代理模式 1.代理模式的定义 为其他对象提供一种代理以控制对这个对象的访问. 2.代理模式的使用场景 当...

网友评论

      本文标题:设计模式之代理模式

      本文链接:https://www.haomeiwen.com/subject/meyvoqtx.html