当前位置: 首页 > news >正文

南昌网站建设一般多少钱一年产品关键词大全

南昌网站建设一般多少钱一年,产品关键词大全,电子商务网站规划原则,网站建设摘要1.什么是java代理模式? 给目标对象提供一个代理对象,并且由代理对象控制对目标对象的引用 我们可以这样理解 我们是用户,代理类是支付宝,我们想用支付宝的转账功能,但是支付宝本身没有转账功能, 又恰好…

1.什么是java代理模式?

给目标对象提供一个代理对象,并且由代理对象控制对目标对象的引用

 我们可以这样理解

我们是用户,代理类是支付宝,我们想用支付宝的转账功能,但是支付宝本身没有转账功能,
又恰好有一个类有支付功能(目标对象),那么支付宝可以用代理的方式,获取支付功能供用户使用

大致内存图

 2.那如何让支付宝去获取转账功能呢?

(1)我们创建一个Person类

public class Person implements InvocationHandler {private Object o;public Person(Object o) {this.o=o;}
}

(2)创建接口类

public interface IZF {void zf(String name1,String name2,double money);
}

 (3)创建一个支付类
 

public class ZF {public void zf(String name1, String name2, double money) {System.out.println(name1+"向"+name2+"转账"+money+"元");}}

 (3)在测试类这样写
 

public static void main(String[] args) {
//ZFB代码支付宝Person ZFB =new Person(new ZF());}

这样我们就可以让支付宝指向支付类(即支付功能了)

我们既然已经指向了支付对象,那么我们再调用对象的方法输入参数,是不是就可以调用到支付能了?

接下来的任务就是如获取到目标对象的方法,之后再调用目标对象的方法

3.获取目标对象的方法

要想获取目标对象的方法,首先要引用Proxy库

import java.lang.reflect.Proxy;

我们再Person类中定义了一个构造方法

 private Object o;public Person(Object o) {this.o=o;}

来指定我们想获取的目标对象,获取的目标对象为o

所以要想获取目标对象的方法,我们就要对目标对象动手脚,用下面这种办法

public class Person implements InvocationHandler {private Object o;public Person(Object o) {this.o=o;}//获取目标对象public Object get() {return Proxy.newProxyInstance(o.getClass().getClassLoader(),o.getClass().getInterfaces(),this);}
}

解释这段代码

  1. Proxy.newProxyInstance() 是Java动态代理机制的核心方法,用于在运行时创建代理对象。

  2. 方法参数:

    • o.getClass().getClassLoader() - 使用原始对象o的类加载器来加载代理类

    • o.getClass().getInterfaces() - 代理对象将实现原始对象o实现的所有接口

    • this - 将当前对象(通常是一个实现了InvocationHandler接口的对象)作为代理的调用处理器

  3. 返回值:

    • 返回一个实现了原始对象o所有接口的代理对象

    • 当调用代理对象的方法时,这些调用会被转发到当前对象的invoke方法(由InvocationHandler接口定义
       


根据这段代码我们获取了o(目标对象)对象的加载器以及接口,也就相当于获取了o对象的的class文件,以及其中的方法

4.调用目标对象的方法

第3点,我们已经获取到了目标文件内容及方法,那么我们该调取方法了
上代码:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class Person implements InvocationHandler {private Object o;public Person(Object o) {this.o=o;}public Object get() {return Proxy.newProxyInstance(o.getClass().getClassLoader(),o.getClass().getInterfaces(),this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {return method.invoke(o, args);}
}

 我们获取了InvocationHandler接口 并用了它的invoke方法!调用方法成功!

5.完整代码+运行结果


Person类


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class Person implements InvocationHandler {private Object o;public Person(Object o) {this.o=o;}public Object get() {return Proxy.newProxyInstance(o.getClass().getClassLoader(),o.getClass().getInterfaces(),this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {return method.invoke(o, args);}
}

 IZF接口
 

public interface IZF {void zf(String name1,String name2,double money);
}

 ZF接口
 

public class ZF implements IZF{@Overridepublic void zf(String name1, String name2, double money) {System.out.println(name1+"向"+name2+"转账"+money+"元");}}

测试类 

public class Test {public static void main(String[] args) {Person ZFB =new Person(new ZF());IZF XX=(IZF)ZFB.get();XX.zf("小白","小黑",100.00);}}

运行结果:
 

 

 

http://www.dtcms.com/a/518766.html

相关文章:

  • 网站的推广费用票可以做抵扣吗网站二级域名解析
  • 虚拟空间做网站建站系统哪个比较好
  • 本机网站建设wordpress菜单高亮
  • 如何成为网站开发工程师微商城 分销平台
  • 上海市建设安装协会网站网站规划与网页设计案例
  • wap站开发海口网站制作案例
  • 江苏广泽建设公司网站网站建设与维护一年多少钱
  • 杭州 洛阳网站建设公司 网络服务坑梓网站建设包括哪些
  • 企业开发网站建设仁怀市城乡建设网站
  • 宁波网站建设网站排名优化开发建设网站需要什么人才
  • 自己如何做网站源码网站建设的内容
  • 中国建设会计学会网站农家院网站素材
  • 撰写网站建设技术解决方案软件工程专业学校排名
  • 重庆网站开发价格宝塔wordpress安装页面打不开
  • 网站建设网页无锡做网站公司费用价格
  • 网站设计 评价 方法广州网页制作步骤
  • 商业网站开发 流程网站推广服务具体内容包括哪些
  • 网站建设中如何设置外链接我的网站突然打不开了怎么回事啊
  • 喜满堂网站建设银行官网登录入口
  • 精仿腾讯3366小游戏门户网站源码织梦最新内核带全部数据!网站在线压缩
  • 帝国建站模板地接做的网站
  • 做企业网站需要什么资料互联网站开发
  • 58网站 做现浇混凝土白山市住房和城乡建设局网站
  • 网站内链有什么用商城网站建设需要什么团队
  • 男朋友抱着我在教室做网站wordpress动
  • 常用的网站推广方法什么是网站建设策划
  • 有没有那个网站是做点心的wordpress站点统计代码
  • 网站自己做余额充值自动扣款新手怎样学校做网站
  • 高端学校网站建设自助微信小程序开发教程
  • 微餐饮建站费用网络空间安全考研