Java代理模式、单例模式和工厂模式

参考:
小猴子博客.http://www.monkey1024.com/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f/1482
小猴子博客.http://www.monkey1024.com/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f/1487
单例模式.https://www.runoob.com/design-pattern/singleton-pattern.html
浏览器设置代理.https://blog.csdn.net/weixin_42419856/article/details/81088665



一、代理模式:

1.话说代理:

代理是什么意思?
我要打官司,但我对法律不太了解,于是请了个律师,让他代理我处理;
鄙人大学做了一个产品,被阿里相中了,阿里公司派来一个主管代理马云和我洽谈;
我们可以在浏览器设置一个代理服务器,用它来上网;

相信大家已经有所体会了,代理就是可以联系双方的中间人。

2.静态代理和动态代理:

详细介绍请点击这里

(1)静态代理:我找中间人,中间人找XiaoMan:

①Beauty接口:
在这里插入图片描述
②XiaoMan,You要调用的目标对象:
在这里插入图片描述
③静态代理中间人NaNa:
在这里插入图片描述

④You:
在这里插入图片描述
⑤测试类:
在这里插入图片描述
You调用makeFriend(),就是调用beauty.eat(),这里的beauty是naNa,
naNa的eat方法是beauty.eat(),这里的brauty是XiaoMan,
所以最终执行的是XiaoMan的eat()方法,You调用了XiaoMan的方法。

(2)动态代理:

动态代理就是你告诉Java一些参数,它来帮你自动生成中间的代理类。
JDK提供动态代理,底层使用反射原理,
但只能创建接口的代理,即例子中必须实现Beauty接口:

第一个参数是 目标类的类加载器
第二个参数是 目标类的接口
第三个参数是 InvocationHandler,代理中 实现的功能 写在该对象中;
通过这三个参数,得到代理类的对象。

第三个参数InvocationHandler的 invoke方法:调用代理类中的任何方法,此方法都会执行;
它的三个参数:
Object proxy: jdk创建出来的的动态代理对象自身的引用,Object类型的引用
Method method:你要执行调用目标对象的哪个方法,比如XiaoMan的eat()
Object[] args:当前被调用方法用到的参数,比如eat()方法的参数,这里没参数,数组为空

①测试类:

public class Test {
   
    public static void main(String[] args) {
   
   		Beauty xiaoMan = new XiaoMan();

        //不需要自己创建代理了
        //NaNa naNa = new NaNa(xiaoMan);

		//由jdk动态的为你创建一个代理
		Beauty bproxy = 
		//java.lang.reflect.Proxy包导入,创建代理,传三个参数
		(Beauty)Proxy.newProxyInstance(
		xiaoMan.getClass().getClassLoader(),//目标类的类加载器
		xiaoMan.getClass().getInterfaces(),//目标类的接口(jdk动态代理,只能创建目标类实现接口的代理对象)
		new InvocationHandler() {
   //匿名内部类,重写invoke方法
         	   
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值