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

湘乡网站建设网络营销理论与实务

湘乡网站建设,网络营销理论与实务,开发公司名称推荐,wordpress 建站五分钟代理模式 代理模式允许你为其他对象提供一个代理,以控制对这个对象的访问。代理模式在不改变实际对象的情况下,可以在访问对象时添加额外的功能。 可以理解为代理模式为被代理对象创造了一个替身,调用者可以通过这个替身去实现这个被代理对…

代理模式

代理模式允许你为其他对象提供一个代理,以控制对这个对象的访问。代理模式在不改变实际对象的情况下,可以在访问对象时添加额外的功能。

可以理解为代理模式为被代理对象创造了一个替身,调用者可以通过这个替身去实现这个被代理对象的功能,这个替身也可以为被代理对象增加功能

静态代理

定义

使用时候需要定义接口或者父类。 代理类和委托类有共同的父类或父接口。

案例

首先定义一个接口 ITeacherDao,并在这个接口中定义一个teacher()方法。

package Static;public interface ITeacherDao {void teacher();
}

再写一个他的实现类,实现teacher()方法

package Static;public class TeacherDao implements ITeacherDao{@Overridepublic void teacher() {System.out.println("老师在教课");}
}

 如上,我们实现了一个简单接口与他的实现类,接下来我们实现一个老师的静态代理类

package Static;public class TeacherDaoProxy implements ITeacherDao{private TeacherDao teacherDao;public TeacherDaoProxy(TeacherDao teacherDao){this.teacherDao = teacherDao;}@Overridepublic void teacher() {System.out.println("代理前");teacherDao.teacher();System.out.println("代理后");}
}

在这段代码中,我们实现了TeacherDao的代理类,并通过调用teacherDao这个对象使用了被代理对象的方法;我们在使用被代理对象方法前后都拓展了新的功能,这就是静态代理。

下面是主函数对于静态代理的使用

public class Main {public static void main(String[] args) {Static.TeacherDao teacherDao = new TeacherDao();TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao);teacherDaoProxy.teacher();}
}

195c117885ca4f15b6cd8463aa19f3fe.png

 这说明我们的代理类在实现被代理对象的功能时也拓展了新的功能

但是,这样的模式也存在一种缺陷,就是我们的代理对象和被调用对象都要实现同一接口或父类,可能会出现多个代理类,接口如果要增加方法的话会有很多代理类需要维护;针对这一问题,Java的开发者定义了相关方法去解决,这就是我们下面要介绍的被代理类。

动态代理

定义

不需要实现接口,但是被代理的目标对象需要实现,调用jdk的api形成代理对象,

动态代理就是通过使用反射,动态地获取抽象接口的类型,从而获取相关特性进行代理。

案例

我们还是先定义一个接口

public interface ITeacherDao {void teacher();void sayhello();
}

接着我们定义他的实现类

public class TeacherDao implements ITeacherDao {@Overridepublic void teacher() {System.out.println("老师在教课");}@Overridepublic void sayhello() {System.out.println("hello");}
}

接着我们实现一个动态的代理类,可以动态代理原对象;在这个代理类中,我们使用到了Proxy.newProxyInstance 这个函数,他有三个参数,以下是三个参数的解释

1.target.getClass().getClassLoader():获取被代理对象的类加载器。这是用于加载代理类的类加载器。

2.target.getClass().getInterfaces():获取被代理对象实现的接口。这些接口是代理类将要实现的接口。

3.new InvocationHandler() { ... }:创建一个匿名的 InvocationHandler 对象,它实现了 invoke 方法,这是代理逻辑的核心部分。

 我们在InvocationHandler() { ... }中调用了被代理对象的方法,并且做了一些扩展

public class FactoryProxy  {private Object target;public FactoryProxy(Object target){this.target = target;}public Object getProxyIstance() {return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("代理前");Object returnVal = method.invoke(target,args);System.out.println("代理后");return returnVal;}});};
}

在主函数中调用被代理类,创建一个接口类,讲接口类传入被代理类,然后就可以定义接口类中的方法了,即实现了动态代理。

public class Main {public static void main(String[] args) {ITeacherDao iteacherDao = new TeacherDao();ITeacherDao proxyInstance = (ITeacherDao) new FactoryProxy(iteacherDao).getProxyIstance();proxyInstance.teacher();proxyInstance.sayhello();}
}

最终输出结果

16a5868de5f44169a1e57c0dd9d84054.png

 可以看出,我们通过动态代理类实现了对目标对象的功能拓展

链接

java静态代理与动态代理: java静态代理与动态代理

 

http://www.yayakq.cn/news/586479/

相关文章:

  • 怎么样提升网站权重公众号模板制作精美
  • 网站二次开发是什么wordpress速度好慢
  • 深圳办公室装修装修公司seo的关键词无需
  • 做传奇网站营销策划与运营方案
  • 计算机网站设计怎么做网站建设好了怎么做推广
  • 离婚协议书正规模板济宁seo优化
  • 菏泽网站制作免费推广自己的产品
  • app网站下载免费wordpress 会议
  • 网站二次开发多少钱沈阳新联会是什么组织做什么
  • 旧域名怎么做新网站微信网站html5
  • 茶叶网站策划网站如何解除绑定域名
  • 网站退出率是什么意思wordpress设为中文
  • 大连网站制作建设WordPress添加ftp
  • asp网站管理系统源码网站用户注册怎么建
  • 平顶山网站建设电话网站内容页相关性怎么做
  • 设计网站建设莱芜怎样建设美食网站
  • 网站建设合同约定三年后郑州防控升级
  • 北京网站建设 app小程序开发教程视频
  • 烟台网站建设联系企汇互联专业包装设计案例分析
  • 蕲春县住房和城乡建设局网站微信推广工具
  • 做海报免费素材网站有哪些创意网站建设话术
  • 河池网站建设公司如何使用mysql数据库做网站
  • 响应式网站定制开发事件营销ppt
  • 做网站页面的视频设计需要的软件
  • 许昌做网站公司哪家专业wordpress主题 使用教程
  • 网站开发与建设课程设计wordpress 局部刷新
  • 高端建站是什么什么类型网站
  • 上海 食品网站设计拍卖网站模板
  • 南宁建站服务西昌市建设工程管理局网站
  • 旅游网站设计模板图片wordpress怎么提权