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

做灯具外贸哪个网站好做百度搜索风云榜总榜

做灯具外贸哪个网站好做,百度搜索风云榜总榜,自己做网站要钱吗,wordpress必装的插件1.代理模式概述 学习内容 1)概述 为什么要有 “代理” ? 生活中就有很多例子,比如委托业务,黄牛(票贩子)等等代理就是被代理者没有能力或者不愿意去完成某件事情,需要找个人代替自己去完成这…

1.代理模式概述

学习内容

1)概述

为什么要有 “代理” ?

  • 生活中就有很多例子,比如委托业务,黄牛(票贩子)等等
  • 代理就是被代理者没有能力或者不愿意去完成某件事情,需要找个人代替自己去完成这件事,这才是“代理”存在的原因。
  • 例如要租房子,房产中介可以在我们住房前代理我们找房子。中介就是代理,而自己就是被代理了。

在代码设计中,代理模式作用主要就是让 “被代理对象” 的某个方法执行之或者执行之加入其他增强逻辑。

前增强 : 例如获取当前时间被代理对象调用方法后增强 : 例如获取当前时间计算方法执行的时间

2)代理的前提条件 : 掌握 !

  • 抽象角色 :声明功能
  • 代理角色 :实现抽象功能 , 完成代理逻辑
  • 被代理角色 :实现抽象功能

意味着被代理角色和代理角色有着共同的父类型(既抽象角色) , 例如我要租房子, 我只能找房产中介, 不能找票贩子
在这里插入图片描述

  • 代理模式存在两种实现方式:

    • 静态代理
    • 动态代理

知识小结

  1. 请说出代码中代理模式的作用?

    代理角色对 被代理就角色某个方法执行的前或者后进行 功能增强
    
  2. 请说出代理模式中的三个角色?

    抽象角色
    代理角色
    被代理角色
    

==============================================================================================================

1.1 静态代理

学习目标

  • 能够写出静态代理模式代码

内容讲解

  • 静态代理是由程序员创建 或 工具生成代理类的源码,再编译代理类。

    在程序运行前就已经存在代理类的字节码文件,代理类和被代理类的关系在运行前就确定了。

    简单理解 : 在程序运行之前 , 代理类就存在了,这就是静态代理 ; 动态代理是程序运行时动态生成代理类

  • 静态代理实现的步骤 :

    • 存在一个抽象角色
    • 定义被代理角色
    • 定义代理,增强被代理角色的功能

案例实践 :

  • 以现实中经纪人代理明星

已知存在接口:

// 1.抽象角色
interface Star {// 真人秀方法double liveShow(double money);void sleep();
}

定义被代理类:

  • 定义王宝强类,实现Star方法
// - 定义被代理角色(宝强)
class BaoQiang implements Star {@Overridepublic double liveShow(double money) {System.out.println("宝强参加了一个真人秀活动赚了" + money + "钱");return money;}@Overridepublic void sleep() {System.out.println("宝强累了 , 睡觉...");}
}

定义代理类:

  • 定义宋喆经纪人类
// - 定义代理角色(宋喆),增强被代理角色的功能
class SongZhe implements Star {private BaoQiang baoQiang;public SongZhe(BaoQiang baoQiang) {this.baoQiang = baoQiang;}@Overridepublic double liveShow(double money) {// 前增强System.out.println("宋喆帮宝强拉了一个真人秀的活动,获取佣金" + money * 0.8 + "元");// 被代理角色的功能double result = baoQiang.liveShow(money * 0.2);// 后增强System.out.println("宋喆帮宝强把赚的钱存了起来...");return result;}@Overridepublic void sleep() {// 前增强System.out.println("宋喆帮宝强定了一家五星级大酒店");baoQiang.sleep();// 后增强System.out.println("宋喆帮宝强退房...");}
}

定义测试类进行测试

/*静态代理实现的步骤  :- 存在一个抽象角色- 定义被代理角色(宝强)- 定义代理角色(宋喆),增强被代理角色的功能*/
public class StaticAgentDemo {public static void main(String[] args) {// 创建被代理角色 , 没有任何增强BaoQiang baoQiang = new BaoQiang();double result = baoQiang.liveShow(1000);System.out.println(result);baoQiang.sleep();System.out.println("===========================");// 创建代码角色对象 , 可以对被代理角色功能做前后增强SongZhe songZhe = new SongZhe(baoQiang);double result2 = songZhe.liveShow(1000);System.out.println(result2);songZhe.sleep();}
}

关系图 :

在这里插入图片描述
宋喆和宝强都有共同的父类型。他们的业务方法都是一样。

静态代理和装饰模式的对比 :

​ BufferedRead(FileRead)

​ 1 装饰设计模式是功能扩展功能,在原有的功能基础之上增加了新的功能

​ 2 而代理主要对功能的前后做了增强

知识小结

  • 请问什么叫做静态代理?

    代码执行前,已经确定了代理的代码逻辑。

2. 动态代理

学习目标

  • 能够知道什么是动态代理
  • 能够熟悉动态代理相关API
  • 能够熟悉动态代理代码执行流程

内容讲解

1)概述

在实际开发过程中往往我们自己不会去创建代理类而是通过JDK提供的Proxy类在程序运行时,运用反射机制动态创建而成

这就是我们所谓的动态代理

与静态代理之间的区别,在于不用自己写代理类

虽然我们不需要自己定义代理类创建代理对象

但是我们要定义对被代理对象直接访问方法的拦截,原因就是对拦截的方法做增强

动态代理技术在框架中使用居多,例如:很快要学到的数据库框架MyBatis框架等一些主流框架技术(Spring,SpringMVC)中都使用了动态代理技术。

2)API学习

Proxy类
  • java.lang.reflect.Proxy类提供了用于创建动态代理类和对象的静态方法

​ 它还是由这些方法创建的所有动态代理类的超类(代理类的父类是Proxy)。

public static Object newProxyInstance (ClassLoader loader, Class<?>[] interfaces,  InvocationHandler h ) 获取代理对象的方法 - 返回值:该方法返回就是动态生成的代理对象
- 参数列表说明:1. ClassLoader loader 	- 定义代理类的类加载器2. Class<?>[] interfaces 	- 代理类要实现的接口列表,要求与被代理类的接口一样。3. InvocationHandler h 	- 就是具体实现代理逻辑的接口
InvocationHandler接口

源码 :

interface InvocationHandler{public Object invoke(Object proxy, Method method, Object[] args);  //代理逻辑
}

java.lang.reflect.InvocationHandler是代理对象的实际处理代理逻辑的接口,具体代理实现逻辑在其 invoke 方法中。所有代理对象调用的方法,执行是都会经过invoke。因此如果要对某个方法进行代理增强,就可以在这个invoke方法中进行定义。

方法说明如下:

public Object invoke(Object proxy, Method method, Object[] args);1. 返回值:方法被代理后执行的结果。
2. 参数列表:1. proxy  - 就是代理对象2. method - 代理对象调用的方法3. args   - 代理对象调用方法传入参数值的对象数组.

3)代码实践

将经纪人代理明星的案例使用动态代理实现

  1. 把父接口定义
  2. 定义被代理类:宝强
  3. 动态生成代理类
  4. 定义代理逻辑
package com.itheima.dynamicproxy_demo;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;// 测试类
/*1 Proxy类 :public static Object newProxyInstance (ClassLoader loader,Class<?>[] interfaces,InvocationHandler h ) 获取代理对象的方法- 返回值:该方法返回就是动态生成的代理对象- 参数列表说明:1. ClassLoader loader 	- 定义代理类的类加载器2. Class<?>[] interfaces 	- 代理类要实现的接口列表,要求与被代理类的接口一样。3. InvocationHandler h 	- 就是具体实现代理逻辑的接口2 InvocationHandler接口public Object invoke(Object proxy, Method method, Object[] args);1. 返回值:方法被代理后执行的结果。2. 参数列表:1. proxy  - 就是代理对象2. method - 代理对象调用的方法3. args   - 代理对象调用方法传入参数值的对象数组.*/
public class DynamicProxyDemo {public static void main(String[] args) {// Proxy.newProxyInstance(被代理角色的类加载器 , 被代理角色实现的所有接口 , 处理器);// 被代理角色的类加载器ClassLoader classLoader = BaoQiang.class.getClassLoader();// 被代理角色实现的所有接口Class<?>[] interfaces = BaoQiang.class.getInterfaces();// 创建被代理角色对象BaoQiang baoQiang = new BaoQiang();// 代理角色 , 动态生成Star songZhe = (Star) Proxy.newProxyInstance(classLoader, interfaces, new MyInvocationHandler(baoQiang));// 代理角色调用liveShow方法songZhe.liveShow(1000);songZhe.sleep();}
}// 定义InvocationHandler接口的实现类
class MyInvocationHandler implements InvocationHandler {private BaoQiang baoQiang;public MyInvocationHandler(BaoQiang baoQiang) {this.baoQiang = baoQiang;}// invoke什么时候会执行????// 代理对象调用功能 , 就会触发invoke方法// 此方法对被代理角色的功能做增强// method : 代理对象调用功能就会触发invoke方法 , invoke方法中的method代表的就是调用的方法对象@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if (method.getName().equals("liveShow")) {// 代理角色对象调用liveShow方法 , 此位置会拦截// 前增强System.out.println("宋喆帮宝强拉了一个真人秀的活动,获取佣金" + (double) args[0] * 0.8 + "元");Object result = method.invoke(baoQiang, (double) args[0] * 0.2);// 后增强System.out.println("宋喆帮宝强把赚的钱存了起来...");return result;} else if (method.getName().equals("sleep")) {// 代理角色对象调用sleep方法 , 此位置会拦截method.invoke(baoQiang);} else {// 除了liveShow和sleep方法 , 会执行else代码块中的内容}return null;}
}//  1 抽象角色
interface Star {double liveShow(double money);void sleep();
}// 2 定义被代理角色(宝强)
class BaoQiang implements Star {@Overridepublic double liveShow(double money) {System.out.println("宝强参加了一个真人秀活动赚了" + money + "钱");return money;}@Overridepublic void sleep() {System.out.println("宝强累了 , 睡觉...");}
}

动态代理调用流程:

在这里插入图片描述

小结

  1. 什么是动态代理?
    在代码执行前,没有代理类,代理类是在程序运行的时候动态生成.

    Proxy.newProxyInstance
    
  2. 动态代理有什么好处?
    动态代理可以为 “被代理对象” 的所有接口的所有方法做代理,动态代理可以在不改变方法源码的情况下,实现对方法功能的增强。

  3. 动态代理相关的API有哪些?

    Proxypublic static Object newProxyInstance(类加载器,接口列表,调用处理器)类加载器 = 被代理对象.getClass().getClassLoader();接口列表 = 被代理对象.getClass().getInterfaces();调用处理器 = new InvocationHandler(){   实现  invoke 方法 };InvocationHandlerpublic Object invoke(代理对象,方法对象,方法的实参类别) 该方法执行时机是,代理对象调用方法时触发执行
    
  4. 动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。

  5. 缺点 :只能针对接口的实现类做代理对象,普通类是不能做代理对象的。

    后面框架学习的时候会接触到CGLib(Code Genneration Library ): 可以实现对类的代理


文章转载自:
http://tisza.zfqr.cn
http://sheet.zfqr.cn
http://kilometer.zfqr.cn
http://nothing.zfqr.cn
http://northerly.zfqr.cn
http://bossdom.zfqr.cn
http://vellication.zfqr.cn
http://rosaniline.zfqr.cn
http://afterlife.zfqr.cn
http://isotron.zfqr.cn
http://stalinism.zfqr.cn
http://gigameter.zfqr.cn
http://fey.zfqr.cn
http://nmu.zfqr.cn
http://prosodical.zfqr.cn
http://northeasterner.zfqr.cn
http://erythromycin.zfqr.cn
http://hohokam.zfqr.cn
http://asemia.zfqr.cn
http://tivy.zfqr.cn
http://scrapple.zfqr.cn
http://andorran.zfqr.cn
http://gaba.zfqr.cn
http://geraniaceous.zfqr.cn
http://medial.zfqr.cn
http://algraphy.zfqr.cn
http://lammy.zfqr.cn
http://signee.zfqr.cn
http://voracious.zfqr.cn
http://radicular.zfqr.cn
http://marketman.zfqr.cn
http://intergalactic.zfqr.cn
http://cromorna.zfqr.cn
http://chaffer.zfqr.cn
http://bouvet.zfqr.cn
http://agamogenesis.zfqr.cn
http://franciscan.zfqr.cn
http://begob.zfqr.cn
http://autecologic.zfqr.cn
http://sensationalize.zfqr.cn
http://manhunt.zfqr.cn
http://pyaemia.zfqr.cn
http://anthomania.zfqr.cn
http://warehouseman.zfqr.cn
http://polynosic.zfqr.cn
http://qiviut.zfqr.cn
http://repercussive.zfqr.cn
http://ultravirus.zfqr.cn
http://mechanotherapy.zfqr.cn
http://sonorousness.zfqr.cn
http://friedmanite.zfqr.cn
http://chainlet.zfqr.cn
http://formula.zfqr.cn
http://chastisement.zfqr.cn
http://perivisceral.zfqr.cn
http://rda.zfqr.cn
http://suppletion.zfqr.cn
http://archegoniate.zfqr.cn
http://pakistani.zfqr.cn
http://laminectomy.zfqr.cn
http://phytosanitary.zfqr.cn
http://scour.zfqr.cn
http://geordie.zfqr.cn
http://sinople.zfqr.cn
http://barrel.zfqr.cn
http://episome.zfqr.cn
http://levalloisian.zfqr.cn
http://kheda.zfqr.cn
http://counterdevice.zfqr.cn
http://zymolytic.zfqr.cn
http://vibrotactile.zfqr.cn
http://toothlet.zfqr.cn
http://theophobia.zfqr.cn
http://matelot.zfqr.cn
http://dolantin.zfqr.cn
http://shavie.zfqr.cn
http://abernethy.zfqr.cn
http://apophasis.zfqr.cn
http://briton.zfqr.cn
http://boccia.zfqr.cn
http://philanthrope.zfqr.cn
http://homefelt.zfqr.cn
http://pleb.zfqr.cn
http://calciphobous.zfqr.cn
http://heterosis.zfqr.cn
http://zesty.zfqr.cn
http://brotherly.zfqr.cn
http://careladen.zfqr.cn
http://praiseworthily.zfqr.cn
http://noordholland.zfqr.cn
http://baggagemaster.zfqr.cn
http://sasquatch.zfqr.cn
http://sty.zfqr.cn
http://monadelphous.zfqr.cn
http://ammo.zfqr.cn
http://lugansk.zfqr.cn
http://cemetery.zfqr.cn
http://triangulation.zfqr.cn
http://autoignition.zfqr.cn
http://anguillan.zfqr.cn
http://www.hrbkazy.com/news/66258.html

相关文章:

  • 改革网首页短视频seo优化
  • 开封建站公司google网站入口
  • 泉州公司做网站下载百度语音导航地图安装
  • 网站开发系统源代码常见的网络推广方法有哪些
  • 企业网站排名软件能优化商业网站
  • 开源网站程序大一网页设计作业成品
  • 景泰做网站网站关键词排名快速提升
  • 有后台的网站怎么做网络推广推广外包服务
  • 选择佛山网站设计在线seo推广软件
  • 欧莱雅网站建设与推广方案友链网站
  • 福州网站外包搜索引擎优化网页
  • 国际网站开发百度的链接
  • 官网html模板优化最狠的手机优化软件
  • 深圳网站建设推广论坛长春做网络优化的公司
  • 互联网技术学什么重庆搜索引擎seo
  • 广州市建委官方网站百度的人工客服
  • 史志网站建设上海关键词优化按天计费
  • 网站设计制作价钱低软文推广500字
  • 平面设计软件下载网站班级优化大师
  • 网站顶部有空白成都百度业务员电话
  • 广州网站建设公司招聘网站标题seo外包优化
  • 沧州网站设计报价百度一下你就知道啦
  • 做网站的属于什么我要发布信息
  • 深圳单位网站建设服务公司最新新闻热点话题
  • 广州天河区疫情明细seo自学网视频教程
  • 网站建设6000元免费关键词挖掘网站
  • 网站制作b s的基本步骤seo公司的选上海百首网络
  • 女人与狗做网站小程序设计
  • wordpress 采集主题seo刷词
  • 政务公开系统网站建设西安网站seo外包