23种设计模式:代理模式--静态代理、JDK代理、CGLib代理

代理模式是一种设计模式,允许在不修改原有对象的情况下对其进行控制。静态代理中,代理类与目标类需实现同一接口,便于透明访问。但当接口变化时,代理类需随之修改。动态代理如JDK代理和CGLib代理则可在运行时动态创建,减少代码冗余。本文介绍了静态代理的示例代码,并提供了CGLib代理的jar包下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

何为代理模式?

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

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

代理模式的种类

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

  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.youkuaiyun.com/download/Elliot_Elliot/18703571?spm=1001.2014.3001.5503

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的Coder*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值