代理模式(静态代理+动态代理)

静态代理

 

 在不改变原有代码的基础上, 增加一些功能

OOP七大原则

纵向开发:dao - service - controller - 前端         横向开发:AOP 代理实现

 

 

动态代理

InvocationHandler   Proxy在reflect包下

InvocationHandler是由代理实例的调用处理程序实现的接口。

每个代理实例都有一个关联的调用处理程序。

当在代理实例上调用方法时,方法调用将被编码并分派到其调用处理程序的invoke方法。

Proxy提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。

 

使用

 

生成代理类(需要传入一个真实的对象[已经实现接口的] ,返回一个动态生成的类)

复制代码
//利用这个类,自动生成代理类
public class Proxy_  implements InvocationHandler{


    //被代理的接口
    private Object object;

    public void setObject(Object object) {
        this.object = object;
    }

    //生成得到的代理类
    public Object getProxy(){
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                object.getClass().getInterfaces(),this);
    }

    @Override  //处理代理实例(自动)  ,返回结果
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//        seeHouse();
        log(method.getName());      //(拓展)获取执行的方法名字
        Object result=method.invoke(object,args);
        return result;
    }


    public void log(String msg){
        System.out.println("执行了"+msg+"方法");
    }

}
View Code
复制代码

相关接口 (不同房东共有的方法)

 

 具体实现的类(可以有很多个房东)

 

 

 

posted @   磕伴  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示