概述
何为代理模式?
“代理”这个关系,在生活中有很多例子,比如说最常见的房产中介,他们便是对房东的代理。房产中介会首先去从众多看房的人中最终定下一个,然后促成和房东的合同签订。
那么,代理模式也就是通过代理类对某一个具体的类的访问提供一些控制,由代理对象控制对原对象的引用。(注意“控制”二字,这是和装饰器模式的区别)
代理模式的种类
代理模式的实现从大的方面分为两种:
- 静态代理
- 动态代理:JDK代理、CGlib代理
静态代理
静态代理中,代理类和被代理对象需要实现相同的接口。保持接口相同时,即便客户端(调用者)在访问被代理对象时经过了代理对象,对他们来说,也是透明的,因为调用的方法是相同的(不是指方法内的具体逻辑)。
- 优势:可以在符合“开闭原则”(对扩展开放、对修改关闭)的前提下,对原有对象提供控制;
- 劣势:
- 接口发生变化时,代理类需要修改;
- 如果存在很多相同逻辑的服务,我们需要为每个服务都创建代理类,而这些代理类中可能存在大量重复的代码。所以,一是需创建太多的代理类,不易管理。二是可能存在代码冗余的情况。
静态代理示例代码如下:
// 目标对象、代理对象必须实现的接口
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代理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复