使用代理模式的作用
1.功能增强:在你原有的功能上,增加了额外的功能。新增加的功能,叫做功能争强。
2.控制访问:代理类不让你访问目标,例如商家不让用户访问厂家。
4.实现代理的方式
1.静态代理:代理类是自己手工实现,自己创建一个java类,表示代理类。同时你所要的目标类是确定的。
特点:1)实现简单
2)容易理解
缺点 1)当目标类增加了,代理类可能也需要成倍的增加,代理类数量过多。
模拟一个用户购买u盘的行为。
2)当你的接口中功能增加了,或者修改了,会影响众多的实现类,代理都需要修改。影响比较多。
用户是客户端类
商家:代理,代理某个产品的u盘
厂家:目标类
三者的关系:用户(客户端)商家(代理)厂家(目标)
实现的步骤:
1.创建一个接口,定义卖u盘的方法,表示你的厂家和商家做的事情。
2.创建厂家类,实现1步骤的接口
3.创建商家,就是代理类,也需要实现1步骤中的接口。
4.创建客户端类,调用商家的方法买一个u盘
代理类完成的功能:
1.目标类中方法的调用
2.功能的增强
2.动态代理:
当静态代理中目标类很多时候,可以使用动态代理,避免静态代理的缺点。
动态代理中目标类即使很多,1)代理类数量可以很少,2)当你修改了接口中方法时,不会影响代理类。
动态代理:在程序执行过程中,使用jdk的反射机制,创建代理类对象,并动态的指定要代理目标类。
换句话说:动态代理是一种创建java对象的能力,让你不用创建TaoBao类,就能创建代理类对象
在java种,要想创建对象:
1.创建类文件,java文件编译为class
2.使用构造方法,创建类的对象。
动态代理的实现:1.jdk动态地理:使用java反射包中的类和接口实现接口动态代理的功能。反射包 java.lang.reflect, 里面有三个类InvocationHanler,Method,Proxy
2.cglib动态代理(了解)
cglib是第三方的工具库,创建代理对象
cglib的原理是继承,cglib通过继承目标类,创建它的子类,在子 类中重写父类中同名的方法,实现功能的修改。
因为cglib