设计模式-代理模式(Proxy Pattern)
概要
记忆关键字:代理控制
定义:为其他对象提供一种代理以控制对这个对象的访问
分析:
1)通过代理类,给对象的行为增加辅助功能的解决方案,就是代理模式
2)在程序运行时,动态地为被代理对象生成代理类,借助编程语言当中的"反射"特性。
3)动态代理可以更灵活地适应不同的接口,无需为每个被代理的类都创建一个代理类。代理对象的创建和管理由代理工具类完成,减少了手动编写代理类的工作。
工厂方法模式结构图如下:
一、能解决什么问题?
二、涉及的角色
1. 抽象主题(Subject)
定义了真实主题和代理主题的共同接口,这样在任何使用真实主题的地方都可以使用代理主题。
2. 真实主题(Real Subject)
实现了抽象主题接口,是代理对象所代表的真实对象。客户端直接访问真实主题,但在某些情况下,可以通过代理主题来间接访问。
3. 代理(Proxy)
实现了抽象主题接口,并持有对真实主题的引用。代理主题通常在真实主题的基础上提供一些额外的功能,例如延迟加载、权限控制、日志记录等。
4. 客户端(Client)
使用抽象主题接口来操作真实主题或代理主题,不需要知道具体是哪一个实现类。
三、静态代理和动态代理
1. 静态代理
在静态代理中,代理类和真实类的关系在编译阶段就已经确定。在编写代理类的时候,需要明确代理哪个具体类,代理类和被代理类之间的关系在编译时就已经确定,因此称为静态代理。
2. 动态代理
在动态代理中,代理类是在运行时动态生成的。
所谓动态代理,就是在程序运行时,动态地为被代理对象生成代理类,这就需要借助编程语言当中的"反射"特性。
3.分析
- 通过代理类,给对象的行为增加辅助功能的解决方案,就是代理模式
- 在程序运行时,动态地为被代理对象生成代理类,借助编程语言当中的"反射"特性。
- 动态代理可以更灵活地适应不同的接口,无需为每个被代理的类都创建一个代理类。代理对象的创建和管理由代理工具类完成,减少了手动编写代理类的工作。
## 4.代理模式跟装饰器模式的区别
- 相似:代理模式跟装饰器模式都是把原有的类对象作为成员,放在代理类或装饰器类当中去调用,
- 区别:对于原有的类来说,装饰器是"自己人",增强的功能是对自身的增强,而代理是"外人",增强的功能和自身并无直接关系