设计模式之代理模式

一.代理模式理解:

调用A类时,不是直接调用A类,而是通过另一个B类,这个B类实现了A类的所有方法,并且在A类的基础上进行功能的增强。

代理模式的作用:当我们使用某个类的时候,我们可以不用去直接访问这个类,可以通过访问代理类进行访问A类,同时我们所谓的代理类还可以在原本A类的基础进行一个加强

二.代理模式分类

2.1静态代理

代理类和目标类实现同一个接口

2.2 动态代理

动态代理的思想其实与静态代理一模一样,动态代理返回泛型,+反射原理,不用我们去手编写代理类,在运行时,动态的在内存中生产代理类。不用在乎具体的目标类是什么,不用去实现同一个接口。

面向接口。

/**
 * Copyright (C), 2015-2019, XXX有限公司
 * FileName: proxyFactory
 * Author:   Administrator
 * Date:     2019/6/5 0005 上午 9:46
 * Description: 动态代理模式
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package moshi.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class proxyFactory  {
    static <T> Object getProxy(T t){
        Object object = Proxy.newProxyInstance(t.getClass().getClassLoader(), t.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("动态代理开启");
                        Object invoke =method.invoke(t,args);
                        System.out.println("动态代理完毕");
                        return invoke;
                    }
                });
        return object;
    }
}
package moshi.proxy;

/**
 * 〈一句话功能简述〉<br>
 * 〈〉
 *
 * @author Administrator
 * @create 2019/6/5 0005
 * @since 1.0.0
 */

public interface fightInte {
    void come() ;
}
package moshi.proxy;

public class fightImp implements fightInte {
    @Override
    public void come() {
        System.out.println("目标功能的实现"+1+1);

    }
}

https://blog.csdn.net/yhl_jxy/article/details/80586785

jdk动态代理 根据拦截器+反射机制实现。

参照其源码 主要做的就是 生成代理类,构造代理函数,创建代理对象,我们然后添加相应功能,通过method.invoke的反射,生成。

生成代理类:

先查看缓存,缓存中没有就去  会从工厂中获取,通过get()方法,如果获取不到,通过某个方法生成类字节码文件来,

生成的代理对象:

生成的代理对象其实还是继承proxy类,同时实现了目标类的接口。

 

 

2.3 cglib动态代理 (面向对象)

cglib底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。

实现 MethodInterceptor;

待更新---------------

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值