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

建企业网站怎样优化网站

建企业网站,怎样优化网站,中国古风网站模板,帮赌博网站做推广被抓会判刑吗代理模式 代理模式允许你为其他对象提供一个代理,以控制对这个对象的访问。代理模式在不改变实际对象的情况下,可以在访问对象时添加额外的功能。 可以理解为代理模式为被代理对象创造了一个替身,调用者可以通过这个替身去实现这个被代理对…

代理模式

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

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

静态代理

定义

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

案例

首先定义一个接口 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.shuangfujiaoyu.com/news/43030.html

相关文章:

  • 做网站需要用到adobe那些软件平台推广精准客源
  • 校园网站开发毕业论文做推广的软件有哪些
  • 做童装批发网站怎么样谷歌浏览器官网下载手机版
  • 中山营销型网站百度引擎入口官网
  • 规划网站建设的主要工作流程每日新闻摘抄10条
  • 如何注册一个好的域名深圳优化公司统高粱seo
  • 灵宝超市建设管理局信访网站网络营销产品策略
  • 做网站到a5卖站赚钱企业培训
  • 库尔勒网站建设推广网站seo外包公司
  • 义乌本地网站开发搭建网站流程
  • 网页设计的首页版式seo优化工程师
  • 深圳做网站推广排名网站要怎么创建
  • 郑州网站设计见效快营销型网站建设应该考虑哪些因素
  • 做网站要多少钱游戏合作渠道
  • 百度站长推送seocui cn
  • b2b是个人还是企业宁波seo网络推广多少钱
  • 大气蓝色律师网站phpcms模板武汉seo优化顾问
  • 广东东莞人才网招聘网win10优化大师
  • 注册上海公司seo排名方案
  • 婚纱照网站制作湖南seo优化首选
  • 内蒙网站开发公司官网模板
  • 自己做网站花钱吗seochan是什么意思
  • 云南专业做网站多少钱关键词搜索爱站网
  • 东莞网站制作哪里找搜索网站有哪几个
  • 教育网站报名百度搜索风云榜
  • 网站建设怎么让百度搜索到怎么做微信小程序
  • 网站广告形式百度推广管理
  • 长沙专业的网站建设企业seo兼职论坛
  • 网站域名更换是怎么做的有哪些网络推广平台
  • 石狮网站seo搜索引擎优化价格