我是靠谱客的博主 无限哈密瓜,这篇文章主要介绍23种设计模式:代理模式--静态代理、JDK代理、CGLib代理,现在分享给大家,希望可以做个参考。

何为代理模式?

“代理”这个关系,在生活中有很多例子,比如说最常见的房产中介,他们便是对房东的代理。房产中介会首先去从众多看房的人中最终定下一个,然后促成和房东的合同签订。

那么,代理模式也就是通过代理类对某一个具体的类的访问提供一些控制,由代理对象控制对原对象的引用。(注意“控制”二字,这是和装饰器模式的区别)

代理模式的种类

代理模式的实现从大的方面分为两种:

  1. 静态代理
  2. 动态代理:JDK代理、CGlib代理

静态代理

静态代理中,代理类和被代理对象需要实现相同的接口。保持接口相同时,即便客户端(调用者)在访问被代理对象时经过了代理对象,对他们来说,也是透明的,因为调用的方法是相同的(不是指方法内的具体逻辑)。

  • 优势:可以在符合“开闭原则”(对扩展开放、对修改关闭)的前提下,对原有对象提供控制;
  • 劣势:
    1. 接口发生变化时,代理类需要修改;
    2. 如果存在很多相同逻辑的服务,我们需要为每个服务都创建代理类,而这些代理类中可能存在大量重复的代码。所以,一是需创建太多的代理类,不易管理。二是可能存在代码冗余的情况。

静态代理示例代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 目标对象、代理对象必须实现的接口 public interface DaoInterface { public void save(); } // 目标类 public class TargetObject implements DaoInterface { public void save() { System.out.println("目标对象进行了保存操作"); } } // 代理类,将需要代理的对象封装到内部 public class StaticProxyClaz implements DaoInterface { private DaoInterface dao; public StaticProxyClaz(DaoInterface dao) { super(); this.dao = dao; } @Override public void save() { System.out.println("代理类在目标类执行保存操作前,进行了预处理"); dao.save(); System.out.println("代理类在目标类执行保存操作前,进行了其它处理"); } } public static void main(String[] args) {// 调用测试 TargetObject obj = new TargetObject(); StaticProxyClaz proxy = new StaticProxyClaz(obj); proxy.save(); }

动态代理之JDK代理

(还在逐步更新,未完~)

CGLib代理

先放上CGLib代理模式需要用到的jar包下载链接:

https://download.csdn.net/download/Elliot_Elliot/18703571?spm=1001.2014.3001.5503

最后

以上就是无限哈密瓜最近收集整理的关于23种设计模式:代理模式--静态代理、JDK代理、CGLib代理的全部内容,更多相关23种设计模式内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(100)

评论列表共有 0 条评论

立即
投稿
返回
顶部