【10月21日】代理模式
设计模式
- 设计模式(Design Pattern)是一套反复被使用、多人知晓、经过分类编目的代码设计经验的总结
- 使用设计模式是为了可重复用代码、让代码更容易被他人理解、保证代码可扩展性和可维护性
- 通用设计模式有23个,每一个设计模式都是某一类经典问题的解决方案
设计模式的本质
-
面向对象设计模式:
要真正理解设计模式就需要透彻理解面向对象设计原则的面向对象三大特性(封装、继承、多态)
-
面向对象编程技术:
设计模式的本质是面向对象编程技术的熟练和灵活应用
学习设计模式 五要素
-
名称
每一种设计模式都有名称,都是经过专门分类编目的,以便于学习交流
-
问题
每一种设计模式都是某一类典型问题的解决方案
-
实现
每一种设计模式都有一种或多种代码实现方式(UML类图)
-
优缺点
每一种设计模式都存在优缺点(没有完美无缺的解决方案)
-
适用场景
每一种设计模式都有其常见典型的使用场景
代理模式
定义
代理模式是为目标对象创建代理对象以提供一种代理机制,让代理对象能控制目标对象的访问,并且可以在不改变目标对象的情况下为目标对象添加额外的功能
分类
- 静态代理
在程序运行前由开发人员提前为目标类创建代理类
- 动态代理
在程序运行过程时运用反射机制动态为目标类创建代理类
优缺点
优点
- 代理模式在客户对象和目标之间起到一个中介作用和保护目标对象的作用
- 代理对象可以扩展目标对象功能
- 代理模式能将客户与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性
缺点
- 代理模式会造成系统设计中的类数量增加
- 在客户对象和目标对象之间增加一个代理对象,会造成请求处理速度变慢
- 在一定程度上增加了系统的复杂度
使用场景
远程代理
为一个位于不同网络计算机的对象提供一个本地的代理(如本地网盘)
虚拟代理
如果需要创建一个消耗较大的对象,先创建一个消耗较小的的对象来表示,真实对象只在需要时才被真实创建(如图片显示)
安全代理
用来控制不同种类客户对真实对象的访问权限
智能指引
主要用于调用目标对象时,代理附加一些额外的处理功能(如GC垃圾回收)
延迟加载
为了提高系统的性能,延迟对目标对象的加载(如MyBatis 的延时加载)