加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮南站长网 (https://www.0554zz.cn/)- 管理运维、图像技术、智能营销、专属主机、5G!
当前位置: 首页 > 站长资讯 > 动态 > 正文

区块链与能源行业的未来

发布时间:2021-02-15 16:31:09 所属栏目:动态 来源:互联网
导读:实现代理模式,需要走以下几个步骤: 「定义真实对象和代理对象的公共接口」(售卖香水接口) 「代理对象内部保存对真实目标对象的引用」(小红引用提供商) 访问者仅能通过代理对象访问真实目标对象,「不可直接访问目标对象」(小明只能通过小红去购买香水,不

实现代理模式,需要走以下几个步骤:

  • 「定义真实对象和代理对象的公共接口」(售卖香水接口)
  • 「代理对象内部保存对真实目标对象的引用」(小红引用提供商)
  • 访问者仅能通过代理对象访问真实目标对象,「不可直接访问目标对象」(小明只能通过小红去购买香水,不能直接到香奈儿提供商购买)

❝代理模式很容易产生错误思维的一个地方:代理对象并不是真正提供服务的一个对象,它只是替访问者访问目标对象的一个「中间人」,真正提供服务的还是目标对象,而代理对象的作用就是在目标对象提供服务之前和之后能够执行额外的逻辑。

从故事来说,小红并不是真正卖香水的,卖香水的还是香奈儿提供商,而小红只不过是在让香奈儿卖香水之前和之后执行了一些自己额外加上去的操作。❞

讲完这个代理模式的代码实现,我们来系统地学习它究竟是如何定义的,以及实现它需要注意什么规范。

代理模式的定义:「给目标对象提供一个代理对象,代理对象包含该目标对象,并控制对该目标对象的访问。」

代理模式的目的:

  • 通过代理对象的隔离,可以在对目标对象访问前后「增加额外的业务逻辑,实现功能增强。」
  • 通过代理对象访问目标对象,可以「防止系统大量地直接对目标对象进行不正确地访问」,出现不可预测的后果

静态代理与动态代理

你是否会有我一样的疑惑:代理为什么还要分静态和动态的?它们两个有啥不同吗?

很明显,所有人都会有这样的疑惑,我们先来看看它们的相同点:

  • 都能够实现代理模式(这不废话吗...)
  • 无论是静态代理还是动态代理,代理对象和目标对象都需要实现一个「公共接口」

重点当然是它们的不同之处,动态代理在静态代理的基础上做了改进,极大地提高了程序的「可维护性」和「可扩展性」。我先列出它们俩的不同之处,再详细解释为何静态代理不具备这两个特性:

  • 动态代理产生代理对象的时机是「运行时动态生成」,它没有 Java 源文件,「直接生成字节码文件实例化代理对象」;而静态代理的代理对象,在「程序编译时」已经写好 Java 文件了,直接 new 一个代理对象即可。
  • 动态代理比静态代理更加稳健,对程序的可维护性和可扩展性更加友好

目前来看,代理对象小红已经能够代理购买香水了,但有一天,小红的另外一个朋友小何来了,「他想购买最纯正的法国红酒」,国内没有这样的购买渠道,小红刚巧也在法国,于是小何就想找小红帮他买红酒啦,这和小明找小红是一个道理的,都是想让小红做代理。

但问题是:在程序中,小红只能代理购买香水,「如果要代理购买红酒」,要怎么做呢?

  • 创建售卖红酒的接口
  • 售卖红酒提供商和代理对象小红都需要实现该接口
  • 小何访问小红,让小红卖给他红酒


这个故事是最典型的代理模式,代购从供应商购买货物后返回给调用者,也就是需要代理的小明。

代理可以分为静态代理和动态代理两大类:

「静态代理」

  • 优点:代码结构简单,较容易实现
  • 缺点:无法适配所有代理场景,如果有新的需求,需要修改代理类,「不符合软件工程的开闭原则」

小红现在只是代理香水,如果小明需要找小红买法国红酒,那小红就需要代理法国红酒了,但是静态代理去扩展代理功能「必须修改小红内部的逻辑,这会让小红内部代码越来越臃肿」,后面会详细分析。

「动态代理」

  • 优点:能够动态适配特定的代理场景,扩展性较好,「符合软件工程的开闭原则」
  • 缺点:动态代理需要利用到反射机制和动态生成字节码,导致其性能会比静态代理稍差一些,「但是相比于优点,这些劣势几乎可以忽略不计」

如果小明需要找小红代理红酒,我们「无需修改代理类小红的内部逻辑」,只需要关注扩展的功能点:「代理红酒」,实例化新的类,通过一些转换即可让小红「既能够代理香水也能够代理红酒」了。

本文将会通过以下几点,尽可能让你理解 Java 代理中所有重要的知识点:

学习代理模式(实现故事的代码,解释代理模式的类结构特点)

比较静态代理与动态代理二者的异同

Java 中常见的两种动态代理实现(JDK Proxy 和 Cglib)

动态代理的应用(Spring AOP)

代理模式

(1)我们定义好一个「售卖香水」的接口,定义好售卖香水的方法并传入该香水的价格。



(编辑:淮南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读