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

概述

何为代理模式?

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

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

代理模式的种类

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

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

静态代理

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

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

静态代理示例代码如下:

// 目标对象、代理对象必须实现的接口
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种设计模式:代理模式--静态代理、JDK代理、CGLib代理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部