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

买证书网站开发工程师word网站链接怎么做

买证书网站开发工程师,word网站链接怎么做,北京市住房和城乡建设网站,关于一学一做的短视频网站文章目录 概念结构实例静态代理动态代理 总结 概念 代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。 比如我们想从其他国家买东西,但我们无法直接联系外国的商家,可以找代理商,让他们…

文章目录

    • 概念
    • 结构
    • 实例
      • 静态代理
      • 动态代理
    • 总结

概念

代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。
比如我们想从其他国家买东西,但我们无法直接联系外国的商家,可以找代理商,让他们帮我们处理,我们是客户端,只需要面向代理商即可,只需要把钱交给代理商,剩下的那些操作,比如联系商家、和商家签订协议等我们都不需要关心。

结构

在这里插入图片描述
Subject(抽象主题):它是代理类和真实类的共同接口,这样一来在任何使用真实对象的地方都可以使用代理对象,客户端通常需要针对抽象主题角色进行编程。
Proxy(代理类) :它包含了真实对象的引用,所以可以在任何时候操作真实对象。一般在调用真实对象前后还需要执行其他操作。
RealSubject(真实类–被代理类):真实类中实现了主要的业务操作。客户端可以调用代理类,来间接的调用真实类。

实例

静态代理

我们想从海外买台电脑,用代理模式实现这个流程。
在这里插入图片描述

购买东西的接口

public interface IBuySomething {void pay();
}

真实类,也就是被代理类

public class Person implements IBuySomething{@Overridepublic void pay() {System.out.println("付款");}
}

代理商,也就是代理类,他来帮我们联系商家

public class Agent implements IBuySomething {private IBuySomething person;public Agent(IBuySomething person) {this.person = person;}@Overridepublic void pay() {findBusiness();person.pay();}private void findBusiness() {System.out.println("我是代理商,付款之前先找到商家");}
}

客户端

public class Client {public static void main(String[] args) {IBuySomething person;person = new Agent(new Person());person.pay();}
}

打印结果:
在这里插入图片描述
也可以让代理商来替我们的朋友来买东西,只需要再声明一个朋友类,让代理商来代理即可。

朋友类

public class Friend implements IBuySomething{@Overridepublic void pay() {System.out.println("我是朋友,我付款");}
}

客户端

public class Client {public static void main(String[] args) {IBuySomething person;person = new Agent(new Friend());person.pay();}
}

打印结果
在这里插入图片描述
反过来,如果想换一家代理商,那就再创建一个新的代理商类即可。

public class Agent2 implements IBuySomething{private IBuySomething person;public Agent2(IBuySomething person) {this.person = person;}@Overridepublic void pay() {findBusiness();person.pay();}private void findBusiness() {System.out.println("我是另外一个代理商,付款之前先找到商家");}
}

动态代理

以上的这种代理方式叫做静态代理。
静态代理的特点是,一个代理类只能代理一个真实类,或者只能代理一个方法。因为它在执行前就编译成了class文件,不会进行改变了,所以被称为静态代理。
但如果我们想动态的代理不同的真实类,或者代理不同的方法,可以使用动态代理来实现。动态代理可以让系统在运行时根据实际需求来动态的创建代理类。
有关动态代理,有两个重要的类。
Proxy类
Proxy类提供了用于创建动态代理对象的方法。它的主要方法newProxyInstance

    public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)

该方法即用来创建一个动态代理对象;第一个参数是代理类的类加载器(作用是将.class文件加载到jvm中,进而生成一个对象实例);第二个参数是真实类实现的接口列表;第三个是执行代理方法的具体程序—InvocationHandler。
简单总结下,要想生成一个代理对象,首先得创建class对象(第一个参数的作用),其次得知道代理谁(第二个参数的作用),最后代理的方法是什么(第三个参数)。这样看来,第二个和第三个参数都是动态的,可变的,这也就是代理模式的灵活性。

InvocationHandler
上面的第三个参数InvocationHandler 是一个接口,它只有一个invoke方法

public Object invoke(Object proxy, Method method, Object[] args)throws Throwable;

该方法用来处理代理类实例的代理方法,并返回相应的结果。即我们代理的方法写在这个方法里。
第一个参数是代理对象;第二个参数是需要代理的方法;第三个参数是需要执行代理方法的参数。

还是拿买东西的例子来说,我们如果买完东西后,发现不合适,需要退款,这时候我们面向的还是代理商,但如果用静态代理的话,那还是需要再写一个代理退款的类,如果业务方法更多的话,那我们需要创建更多的静态代理类,这样处理起来很麻烦。如果用动态代理的话,就没有这么冗余。我们首先实现一个InvocationHandler,它的invoke方法是用来实现代理对象的方法。

public class AgentHandler implements java.lang.reflect.InvocationHandler {private Object object;public AgentHandler(Object object) {this.object = object;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {findBusiness();Object result = method.invoke(object, args);return result;}private void findBusiness() {System.out.println("我是代理商,我要先找到商家");}
}

我们也增加一个退款的方法

public interface IBuySomething {void pay();void refund();
}

客户端调用

public class Client {public static void main(String[] args) {IBuySomething person = new Person();InvocationHandler handler = new AgentHandler(person);Object o = Proxy.newProxyInstance(person.getClass().getClassLoader(), person.getClass().getInterfaces(), handler);IBuySomething proxy = (IBuySomething) o;proxy.refund();}
}

打印结果:
在这里插入图片描述

总结

静态代理比较好理解,代理类里面实现了代理的方法。
而动态代理的代理对象是通过Proxy创建的,代理的方法是在InvocationHandler里的invoke方法里,和静态代理对比的话,代理类和代理方法是分离开的。

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

相关文章:

  • 网站建设的关键词网站改了模板被百度降权
  • 郑州十大网站建设公司怎么查看网站建设时间
  • 网站建设冖金手指花总十五seo排名网站 优帮云
  • 云南手机网站建设织梦做泰文网站
  • 有没有找人做标书的网站品牌高端网站
  • 做淘宝一样的网站深圳网站建设外贸公司
  • 郑州网站高端网站设计wordpress数据多大后慢
  • 沙井做网站网站建设是前端的吗
  • 网站开发培训怎么样wordpress后台登陆
  • 网站标题优化 英文北京的it外包公司
  • 教做网站视频iis7安装wordpress
  • 百度上能收到的企业名称网站怎么做如何搭建网页游戏
  • 药物研发网站怎么做网站页面怎么做导航
  • 哪些网站用户体验好苏州网站推广电话
  • 大同格泰网站建设镇江网站建设活动方案
  • 网站建设重要意义株洲网页定制
  • 做淘宝客必须要有网站吗邯郸网站设计应搜韦欣cidun8上词
  • 冻品网站建设那些企业需要做网站
  • 东莞微信网站开发大学生对校园网站建设的需求是什么
  • 网站如何做搜索引擎优化建筑工程网官网入口
  • 网站建设所需服务器费用静态网页生成
  • 建正建设官方网站万维网 网站到期
  • 成都网站建设开发价格网站建设与维护教案
  • 好大夫在线个人网站王建设婺源旅游攻略
  • 网站建设陷阱网站开发实用吗
  • 手机网站趋势wordpress 底部音乐播放器插件
  • 网站建设的公司哪家便宜微信怎么生成小程序
  • 湛江网站制作费用深圳学历提升
  • 做网站的策划需要做什么成都网站建设蜀美网络
  • 东莞个人网站制作网页版微信二维码付款怎么弄