介绍
由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
如何理解
演员都有经纪人,在谈合约时,经纪人负责和导演谈价格、时间,演员只需要把时间精力用在表演上
工厂只需要负责生产,销售交给代理公司
代理的作用
- 可以在 目标类方法的前面,增加额外代码
- 可以 修改传入参数
- 可以决定 是否调用 目标类方法
- 可以 修改返回值
- 可以在 目标类方法的后面,增加额外代码
应用场景
假设已经写好 30 个类,每个类有 4 个方法。由于需求改变,要给这 120 个方法增加权限,只能 系统管理员 才能调用。
如果传统方式,就需要修改这 120个 方法
有了代理模式后,可以通过很小的改动,实现这一功能
代理模式常用于:
- 添加权限,访问控制
- 数据库连接池。通过连接池创建的连接,调用
close()方法时,并没有真正关闭,而是放回到连接池中 - web项目中,处理乱码
- 访问日志
- 审计
注意: 如果只是修改10个方法,使用代理模式的意义不大
优点
- 代理模式在客户端与目标对象之间起到一个 中介作用 和 保护 目标对象的作用;
- 代理对象可以 扩展 目标对象的功能;
- 代理模式能将客户端与目标对象分离,在一定程度上 降低耦合度,增加了程序的可扩展性
缺点
- 代理模式会造成系统设计中 类的数量增加
- 在客户端和目标对象之间增加一个代理对象,会造成请求 处理速度变慢;
- 增加了系统的 复杂度;
