java代理模式租房案例
一. JDK动态代理:
1.1 概述:代理的具体实现在创建对象的时候根据需要动态加入。
1.2 动态代理和静态代理的区别:静态代理是直接创建代理类,在类中定义好具体的实现;动态代理创建对象的时候加。静态代理创建代理类,在类中定义代理内容,再创建对象。
1.3 JDK动态代理:代理和被代理对象都实现了共同的接口,相当于兄弟关系。
注:
1.Javajdk提供了一种接口式的处理方式,想要产出代理对象,当前的目标对象必须要有一个接口,产生的代理对象并不是目标对象类型,是目标对象的接口类型,只是具有目标对象的功能,并且对功能进行了增强。
2.继承式的代理,目标对象不一定需要接口,但目标对象一定要能够被继承,不能被final修饰。Cglib会自己创建一个虚拟的类继承目标对象类,并重写里面的方法。在重写的方法中调用了原始方法最终得到的是目标对象的子类对象。这个对象是目标对象的类型。1.4 JDK动态代理案例——租房
1)创建中介与房东的公共接口
package com.gh.dao;public interface ZuFang {Integer chuZu(Integer money);
}
2)实现接口方法
package com.gh.dao.impl;import com.gh.dao.ZuFang;public class FangDong implements ZuFang {public Integer chuZu(Integer money) {System.out.println("房东收到房租:"+money);return money;}
}
3)测试
@Testpublic void testFang(){final FangDong target = new FangDong();ZuFang proxy = (ZuFang)Proxy.newProxyInstance(target.getClass().getClassLoader(),//代理目标的类加载器target.getClass().getInterfaces(),//代理目标的接口Snew InvocationHandler() {/*** @param proxy 代理对象,一般用不到* @param method 代理的方法* @param args 代理方法中接收到的参数们* @return 代理对象*/public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("中介发广告");System.out.println("中接带看房");System.out.println("中介签合同");System.out.println("中介收房租:" + args[0]);args[0] = (Integer) args[0] - 400;Object invoke = method.invoke(target, args);System.out.println("中介提供售后");return invoke;}});Integer integer = proxy.chuZu(2000);System.out.println(integer);}
- 1.5 Cglib动态代理(基于继承;代理和被代理对象产生继承关系;需要导入cglib依赖)
1)导入依赖
<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version>
</dependency>
2)创建继承方法类
package com.gh.proxyCglib;public class FangDong {public Integer chuZu(Integer money) {System.out.println("房东收到房租:"+money);return money;}
}
3)测试
@Testpublic void testCglib01() {final FangDong target = new FangDong();FangDong proxy = (FangDong) Enhancer.create(target.getClass(), new MethodInterceptor() {/*** @param proxy 代理对象,一般不用* @param method 被代理方法* @param objects 方法中传入的参数* @param methodProxy 方法代理* @return* @throws Throwable*/public Object intercept(Object proxy, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println("中介代看房");System.out.println("中介签合同");System.out.println("中介收房租:" + objects[0]);objects[0] = (Integer) objects[0] - 400;Object result = method.invoke(target, objects);System.out.println("中介售后服务");return result;}});Integer integer = proxy.chuZu(3000);System.out.println(integer);}
三.静态代理(房东中介案例)
- 接口
/*** 公共接口* 中介和房东都需完成的方法*/
public interface ZuFang {Integer chuZu(Integer money);
}
- 代理目标
public class FangDong implements ZuFang {@Overridepublic Integer chuZu(Integer money) {System.out.println("房东收房租==>" + money);return money;}
}
- 代理
public class ZhongJie implements ZuFang {FangDong fangDong = new FangDong();@Overridepublic Integer chuZu(Integer money) {System.out.println("发广告");System.out.println("带看房");System.out.println("签合同");fangDong.chuZu(money-400);System.out.println("中介收房租===》" + money);System.out.println("修电器...");return money;}
}
- 测试
@Testpublic void testZu(){ZhongJie zhongJie = new ZhongJie();Integer zu = zhongJie.chuZu(3600);}
java代理模式租房案例相关推荐
- java代理模式实现
java代理模式实现 @(代理模式)[静态代理,动态代理,InvocationHandler] java的代理模式 分为两种,静态代理和动态代理,学习下什么是代理和静态动态代理的作用. java代理模 ...
- Java代理模式汇编
文章目录 Java 代理模式实现方式,主流如下五种方法 Notes 静态代理实现 实现步骤 Cat接口 委托类 Lion 代理类角色(FeederProxy) 静态代理类测试 动态代理类(基于接口实现 ...
- java代理模式_Java代理
java代理模式 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. 它将指导您 ...
- java代理模式(java代理模式和适配器模式)
Java设计模式的中介者模式是怎样的? 如果对象之间的关系原本一目了然,中介对象的加入便是"画蛇添足". 来看下中介者模式的组成部分吧. 1) 抽象中介者(Mediator)角色: ...
- java代理模式总结
Java代理模式根据代理类生成时间的不同,可以分为静态代理和动态代理,它如同中介机构,可以为目标类提供代理服务,以控制对对象的访问,目标类的任何方法在执行前都必须经过代理类,这样代理类就可以用来负责请 ...
- [Java] 代理模式 Proxy Mode
[Java] 代理模式 Proxy Mode 文章目录 [Java] 代理模式 Proxy Mode 1. 代理思想 2.java.lang.reflect.Proxy类 2.1 利用反射创建prox ...
- 浅谈自己对Java代理模式的理解--即为什么要用怎么用
首先,国际惯例,上Java代理模式的定义: Java代理模式:对其他对象提供一种代理以控制对这个对象的访问. 定义很简单,就一句话,怎么去理解,不急,先听一个小故事: 故事 ...
- 阿里十年资深程序员吐血总结之Java代理模式
阿里十年资深程序员吐血总结之Java代理模式 文章目录 阿里十年资深程序员吐血总结之Java代理模式 1.接口代理 2.类代理 3.动态代理都是通过反射实现的吗 4.jdk动态代理和cglib动态代理 ...
- java代理模式解析
1.代理模式概述: 代理模式(Proxy Pattern):给某一个对象提供一个代理,并且由代理对象控制对原对象的引用.<设计模式的艺术> 使用场景: 客户端在使用一个功能时,不希望直接使 ...
- java代理模式-原来你是这样的代理
这几天在看一些框架源码时看到了一个很奇妙的设计模式,有种熟悉个感觉,一时想不出是什么模式,后面经过了解才知道是动态代理,就这样带着好奇心学习了这个模式,更深入了解代理会发现不仅有静态和动态,还有很多其 ...
最新文章
- Laravel 5.5.* Bug一枚
- android 命令启动服务,adb 命令
- 2016年10月起微软更改了更新服务模型
- qpython3编辑器怎么用_Python快速入门系列:Pyqt5界面开发好帮手-Qss样式编辑器介绍...
- 前端学习(3227):回调形式的ref的调用次数
- JDK 环境变量配置
- centos6 yum源_Centos6安装Zabbix3.4.15注意事项
- java 图像边界识别_图像识别原理之如何识别图像边缘
- ASCII与unicode的转换
- Python正则表达式模式备忘表
- 使用 classList API
- python ipad 微信_用Python玩微信(非常详细)
- 计算机键盘上范的怎么点击,微信怎么用键盘最小化 电脑最小化键盘怎么按
- 2015年4月21日---开始写自己的专业博客啦
- android手机之-------64位操作系统 与 64位处理器
- android inflate,Android LayoutInflater inflate() 图示详解
- 瘦,是一种信仰。轻,是一种理想
- 加速度计和陀螺仪解析
- 《项目管理中国式漫画》读后感
- iOS 客户端基于 WebP 图片格式的流量优化(下)