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

做网站就extjs网站开发

做网站就,extjs网站开发,企业展厅设计公司信息,徐州企业建站程序代理模式的定义#xff1a; Provide a surrogate or placeholder for another object to control access to it.#xff08;为其他对象提供一种代理以控制对这个对象的访问。#xff09; 简单说#xff0c;就是设置一个中间代理来控制访问原目标对象#xff0c;达到增强原…代理模式的定义 Provide a surrogate or placeholder for another object to control access to it.为其他对象提供一种代理以控制对这个对象的访问。 简单说就是设置一个中间代理来控制访问原目标对象达到增强原对象的功能和简化访问方式的目的。 代理模式通用类图 Java实现代理模式分为两类三种两类是静态代理和动态代理动态代理又可以分为JDK动态代理和CGLIB动态代理。 Java实现代理模式 静态代理 静态代理比较简单代理类需要实现和目标接口类一样的接口。 Solver静态代理类图 接口类ISolver public interface ISolver {void solve(); }目标类Solver public class Solver implements ISolver {Overridepublic void solve() {System.out.println(疯狂掉头发解决问题……);} }代理类SolverProxy代理类也要实现接口并且还要维护一个目标对象。 public class SolverProxy implements ISolver {//目标对象private ISolver target;public SolverProxy(ISolver target) {this.target  target;}Overridepublic void solve() {System.out.println(请问有什么能帮到您);target.solve();System.out.println(问题已经解决啦!);} }客户端Client public class Client {public static void main(String[] args) {//目标对象:程序员ISolver developer  new Solver();//代理客服小姐姐SolverProxy csProxy  new SolverProxy(developer);//目标方法解决问题csProxy.solve();} }运行结果 请问有什么能帮到您 疯狂掉头发解决问题…… 问题已经解决啦!我们看到通过静态代理可以在不修改目标对象的前提下扩展目标对象的功能。 但是它也有一些问题 冗余由于代理对象要实现与目标对象一致的接口会产生过多的代理类。 维护性不佳一旦接口增加方法目标对象与代理对象都要进行修改。 JDK动态代理 JDK动态代理利用了JDK反射机制动态地在内存中构建代理对象从而实现对目标对象的代理功能。 它主要用到了两个反射类的API java.lang.reflect Proxy| static Object newProxyInstance(ClassLoader loader,Class?[] interfaces, InvocationHandler h)返回一个指定接口的代理类实例该接口可以将方法调用指派到指定的调用处理程序 java.lang.reflect InvocationHandlerObject invoke(Object proxy, Method method, Object[] args) 在代理实例上调用目标方法并返回结果。 我们来看看使用JDK动态代理之后的客服代理场景。 JDK动态代理类图 接口类ISolver public interface ISolver {void solve(); }目标类Solver目标类需要实现接口类。 public class Solver implements ISolver {Overridepublic void solve() {System.out.println(疯狂掉头发解决问题……);} }动态代理工厂:ProxyFactory这里的动态代理工厂不需要实现接口直接采用反射的方式生成一个目标对象的代理对象实例。 ps:这里用了一个匿名内部类的方法还有一种方法动态代理类实现InvocationHandler接口大体上类似就不再给出例子了。 public class ProxyFactory {// 维护一个目标对象private Object target;public ProxyFactory(Object target) {this.target  target;}// 为目标对象生成代理对象public Object getProxyInstance() {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 returnValue  method.invoke(target, args);System.out.println(问题已经解决啦);return null;}});} } 客户端Client 客户端生成一个代理对象实例通过代理对象调用目标对象方法的时候就会进入invoke()方法最后是通过反射的方式调用目标对象的方法。 public class Client {public static void main(String[] args) {//目标对象:程序员ISolver developer  new Solver();//代理客服小姐姐ISolver csProxy  (ISolver) new ProxyFactory(developer).getProxyInstance();//目标方法解决问题csProxy.solve();} }运行结果 请问有什么可以帮到您 疯狂掉头发解决问题…… 问题已经解决啦我们简单总结一下静态代理和动态代理的主要区别 静态代理动态代理最主要区别 静态代理在编译时就已经实现编译完成后代理类是一个实际的class文件 动态代理是在运行时动态生成的即编译完成后没有实际的class文件而是在运行时动态生成类字节码并加载到JVM中 我们也观察到JDK动态代理目标对象必须得实现接口也就是说它是面向接口的假如我们不想要接口怎么办呢 Cglib动态代理 CGLIB(Code Generation Library)是一个基于ASM的字节码生成库它允许我们在运行时对字节码进行修改和动态生成它是通过继承来实现的。 我们来看看使用Cglib之后我们的客服代理是什么样的 Cglib动态代理类图 引入依赖Cglib是第三方类库需要引入依赖         dependencygroupIdcglib/groupIdartifactIdcglib/artifactIdversion3.2.5/version/dependency目标类Solver这里目标类不用再实现接口。 public class Solver {public void solve() {System.out.println(疯狂掉头发解决问题……);} }动态代理工厂 public class ProxyFactory implements MethodInterceptor {//维护一个目标对象private Object target;public ProxyFactory(Object target) {this.target  target;}//为目标对象生成代理对象public Object getProxyInstance() {//工具类Enhancer en  new Enhancer();//设置父类en.setSuperclass(target.getClass());//设置回调函数en.setCallback(this);//创建子类对象代理return en.create();}Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println(请问有什么可以帮到您);// 执行目标对象的方法Object returnValue  method.invoke(target, args);System.out.println(问题已经解决啦);return null;}}客户端Client public class Client {public static void main(String[] args) {//目标对象:程序员Solver developer  new Solver();//代理客服小姐姐Solver csProxy  (Solver) new ProxyFactory(developer).getProxyInstance();//目标方法解决问题csProxy.solve();} }运行结果 请问有什么可以帮到您 疯狂掉头发解决问题…… 问题已经解决啦我们可以看到Cglib动态代理和JDK动态代理最大的区别就是: 使用JDK动态代理的对象必须实现一个或多个接口 使用Cglib动态代理的对象则无需实现接口达到代理类无侵入。 我们还需要注意 CGLib不能对声明为final的方法进行代理因为是通过继承父类的方式实现如果父类是final的那么就无法继承父类。
http://www.zqtcl.cn/news/750982/

相关文章:

  • 公司网站首页怎么做在线二级域名子域名查询
  • 淮南网站优化公司国内什么网站用asp.net
  • 做数据网站带网站的图片素材
  • 大方县住房城乡建设局网站wordpress 连接flickr
  • 国家建设部网站倪虹邢台新闻最新事件
  • 杭州网站 建设广州金将令做网站怎么样
  • 苏州科建设交通学院网站地方网站类型
  • 怎样做投资理财网站城乡建设部网站第35号令
  • 南昌集团网站建设wordpress去掉rss订阅
  • 郑州做网站的外包公司有哪些宁波 电商平台网站建设
  • 网站平台开发多少钱wordpress文章展示
  • 汕尾市企业网站seo点击软件建设一个网站的步骤有哪些
  • 备案上个人网站和企业网站的区别实名认证域名可以做电影网站吗
  • 顾氏网站建设有限公司怎么样memcache安装wordpress
  • 邯郸网站建设渠道免费做全网解析电影网站赚钱
  • 中铁中基建设集团网站东莞网络优化哪家公司好
  • wordpress免费建站合肥关键词网站排名
  • 中铁建设集团门户网登录网站自己可以建设环保公益网站吗
  • 国内电子商务网站有哪些网站升级中html
  • 影响网站加载速度顺德做网站那家好
  • 如何备份网站的百度怎样建立网站
  • 如何建立网站视频教程湖北seo关键词排名优化软件
  • 南宁网站建设推荐q479185700顶上新公司网站建设流程
  • 石家庄城乡建设局网站四川网络营销
  • 网站更换名称需要重新备案吗赣州章贡区二手房出售信息
  • 浙江恒元建设网站wordpress 主题 英文
  • 甘肃网站建设推广做暧昧免费视频大全网站
  • 科技公司网站系统个人网站模板大全
  • 建网站源码建站详解做加油机公司网站
  • 北海做网站有哪家网站布局策划案