定义 为其它对象提供一种代理以控制对这个对象的访问
类图
优点
1. 职责清晰 真实的角色就是实现的业务逻辑,不用关心其他非本指责的事务
2. 高扩展性 具体主题角色不能怎么变化,只要它实现了接口,代理类完全可以在不做任何修改的情况下使用
3. 智能化 动态代理是最好的体现,即在运行阶段才指定实际代理对象(Struts如何把表单元素映射到对象上?)
使用场景 典型应用如Spring AOP
扩展
1. 普通代理 要求客户端只能访问代理角色,而不能访问真实角色
2. 强制代理 要求客户端必须通过真实角色找到代理角色(演员和经纪人)
3. 虚拟代理 指在需要的时候,才初始化主题对象,可以避免被代理对象太多而引起的初始化缓慢问题
1. 动态代理 指在实现阶段不用关心代理谁,而在运行阶段才指定代理哪个对象,动态代理根据被代理的接口生成所有的方法即给定一个接口,动态地理就宣传我已经实现该接口下的所有方法了(通过InvocationHandler接口)
类图