代理(重点)
是一种设计模式(设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。),提供对目标对象另外的访问方式,即通过代理对象访问目标对象。
代理就是帮人做事情。比如我们现在很常用的代购场景,我媳妇需要买一套护肤品,去官网买的话比较贵,所以就找代购去买,代购其实也没有这个护肤品,但是他有渠道直接跟护肤品的商家有关系,能直接从商家拿这个护肤品,你是没办法联系上这个商家的,但是他肯定不能一点酬劳都不收,所以他会加价卖给你,这就是代理的典型模式。
代理的好处
可以在目标对象实现的基础上增强额外的功能,即扩展了目标对象的功能。(如果需要修改别人的东西,不需要修改别人的代码,只需要引用他的对象,即代理,在代理上实现扩展自己的功能)
代理模式
定义
给目标对象提供一个代理对象,并且由代理对象控制对目标对象的引用
目的
通过代理对象间接的访问目标对象,防止直接访问目标对象给系统带来不必要的复杂性
通过代理业务对原由业务增强
实现方式
静态代理:代理类是自己手动创建的,所需要代理的目标类是确定的,实现简单容易理解
多态代理:
基于jdk的多态代理——————需要有接口(多使用)
基于CGLIB的多态代理——————需要有父类(但是在创建对象上,要使用字节码来进行创建对象,耗时会比JDK久很多。对于final修饰的方法是无法进行代理的。)
通过实现同一个接口,来达到多态代理的效果、
静态代理举例
BuyClothes接口
//买衣服接口
public interface BuyClothes {
void cloths(String size);
}
ClothesFactory实现类
//工厂实现类
public class ClothesFactory implements BuyClothes {
@Override
public void cloths(String size) {
System.out.println("为您制作一套size为"+size+"的衣服");
}
}
ProxyClothes实现类
//代购实现类
public class ProxyClothes implements BuyClothes {
//包含目标对象
public ClothesFactory clothesFactory;
//有参构造函数
public ProxyClothes(ClothesFactory clothesFactory) {
this.clothesFactory = clothesFactory;
}
public ProxyClothes()</