设计模式(6):代理模式

我们先说一下什么是代理?在生活中有哪些代理的使用场景?
1、代理其实就是帮助某些事物提供一些服务,比如房屋中介公司,他们就是代理,当你要买房的时候,你需要知道很多房产的信息,然后你很难获取到比较全的数据,那怎么办呢,就去找代理(房屋中介公司),代理会问地产开发商房子的价格、地段、格局等。。。信息,然后再给你。这就是代理干的事情。在开发系统中我们可能也会遇到这种情况,这个是时候代理模式就派上用场了。
2、代理模式的模板:
在这里插入图片描述
● Subject抽象主题角色 抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。
● RealSubject具体主题角色 也叫做被委托角色、被代理角色。它才是冤大头,是业务逻辑的具体执行者。
● Proxy代理主题角色 也叫做委托类、代理类。它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角 色实现,并且在真实主题角色处理完毕前后做预处理和善后处理工作。
3、代理模式的分类:
3.1、静态代理:由程序员创建或由特定工具自动生成源代码,再对其编译,在程序运行前,代理类的.class文件就已经存在了。
3.2、动态代理:动态代理类的字节码在程序运行时由Java反射机制(jdk dynamic proxy)或修改字节码生成子类(cglib)动态生成,无需程序员手工编写它的源代码。
4、案例:
4.1、静态代理:我们模拟游戏代练,游戏代练也是代理的概念,玩家就是被代理者,代练就是真正干活的代理,类图如下:
在这里插入图片描述
代码结构:
在这里插入图片描述
IGamePlayer:
在这里插入图片描述
DNFGamePlayer:
在这里插入图片描述
LOLGamePlayer:
在这里插入图片描述
Proxy:在这里插入图片描述
Test:在这里插入图片描述
4.2、jdk 动态代理:jdk动态代理利用拦截器(拦截器必须实现InvocationHanlder)加上反射机制生成一个实现代理接口的匿名类,
在调用具体方法前调用InvocationHanlder来处理,类图如下:
在这里插入图片描述
代码结构:
在这里插入图片描述
IGamePlayer:
在这里插入图片描述
GamePlayer:
在这里插入图片描述
GamePlayerHandler:
在这里插入图片描述
JdkDynamicProxy:此类只是提供一个静态方法用于运行期间创建代理对象。
在这里插入图片描述
Test:

在这里插入图片描述
4.3、cglib 动态代理

在这里插入图片描述
代码结构图:
在这里插入图片描述
IGamePlayer:
在这里插入图片描述
GamePlayer:
在这里插入图片描述
GamePlayerInterceptor:
在这里插入图片描述
CglibDynamicProxy:
在这里插入图片描述
Test:
在这里插入图片描述

5、总结:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值