简单JDK动态代理demo

本文通过一个生动的示例展示了Java动态代理的使用,创建了一个微信代理类(WXProxy)作为中介,代理火辣美女(HotGirl)与帅哥(HandsomeBoy)的约会过程,包括前期调查、约会及后期反馈等环节,详细解释了代理类如何通过InvocationHandler接口实现代理功能。

JDK动态代理demo

先了解一下代理的概念:
在这里插入图片描述


/**
 * @Description: 定义一个女孩,声明这个女孩想干的事
 */
public interface Girl {

     void date();

     void watchMovie();
}


/**
 * @Date: 2022/3/5
 * @Version: 1.1
 * @Description:  定义一个可爱美丽的热辣美女
 */
public class HotGirl  implements Girl {

    public HotGirl(){
        System.out.println("从前有位火辣妹子,想找个帅哥出去玩," +
                "但是很难找到符合自己的,所以就去找代理机构帮忙");
    }

    @Override
    public void date() {
        System.out.println("===========女生心想,nice ,终于有帅哥和我约会啦===========");
    }

    @Override
    public void watchMovie() {
        System.out.println("===========女生心想,nice ,终于有帅哥和我看电影啦===========");
    }
                                                                                                                
/**                                                                                                                                                                                                              
 * @Date: 2022/3/5                                                                                              
 * @Version: 1.1                                                                                                
 * @Description: 定义一个微信代理类,可以用来约妹子的代理                                                                           
 */                                                                                                             
public class WXProxy implements InvocationHandler {                                                             
                                                                                                                
    //想要约妹子可以找我,(看,我的类里面就有妹子的属性)                                                                                
    //可以帮你找到妹子哦。                                                                                                
    private Girl girl;                                                                                          
                                                                                                                
    //这个代理有妹子的入驻。让这个代理能代理妹子                                                                                     
    public WXProxy(Girl girl){                                                                                  
        System.out.println("代理机构接待了这位妹子,让妹子留一份生活信息");                                                           
        this.girl = girl;                                                                                       
    }                                                                                                           
                                                                                                                
    //代理前需要做一些调查或者匹配                                                                                            
    void proxyFront(){                                                                                          
        System.out.println("代理机构会先看看这个男生的基本信息是否符合这位妹子," +                                                       
                "做过调查后,觉得蛮匹配的让他开始约女生");                                                                         
    }                                                                                                           
                                                                                                                
    //想要约妹子,那也是需要条件的 前面                                                                                         
    //你有没有钱,长的帅不帅呀                                                                                              
    @Override                                                                                                   
    public Object invoke(Object proxy, Method method, Object[] args)                                            
            throws Throwable {                                                                                  
        proxyFront();                                                                                           
        //只有实际在调方法的时候才会到这个                                                                                      
        Object invoke = method.invoke(girl,args);                                                               
        dateAfter();                                                                                            
        return invoke;                                                                                          
    }                                                                                                           
                                                                                                                
     //和妹子约出去后,需要去问下女孩的感受,是否合适,有没有第二次约会之类的                                                                      
      void dateAfter(){                                                                                         
          System.out.println("约会过后,代理机构去询问妹子,这个男生是否合适,有没有第二次约会意向之类的");                                          
      }                                                                                                         
                                                                                                                
      //可以看成代理机构正在为您生成女孩的基础资料(包括住址,身高,爱好等信息)                                                                    
      public Object getProxyInstance(){                                                                         
          System.out.println("代理机构就开始整理这位妹子的基础资料,并为她发布找帅哥出去玩的信息");                                              
        return Proxy.newProxyInstance(girl.getClass().getClassLoader(),girl.getClass().getInterfaces(),this );  
      }                                                                                                         
                                                                                                                
}                                                                                                               
                                                                                                                
/**
 * @Date: 2022/3/5
 * @Version: 1.1
 * @Description: 帅哥
 */
public class HandsomeBoy {


    public static void main(String[] args) {
        //有一位火辣妹子
        HotGirl hotGirl = new HotGirl();
        //入驻这个代理机构
        WXProxy wxProxy = new WXProxy(hotGirl);
        //代理机构呢,为这个帅哥(类)提供这个火辣妹子
        Girl girl = (Girl)wxProxy.getProxyInstance();
        System.out.println("这个时候有位帅哥,看到了这位妹子的信息,觉得不错,就去找代理机构咨询");
        //因为是在帅哥这个类的方法执行,可以看成帅哥成功约会到妹子
        girl.date();
        System.out.println("============================================");
        //可以看成帅哥成功和妹子看电影
        girl.watchMovie();
    }
}

输出结果:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值