代理模式是为其他对象提供一种代理以控制对这个对象的访问,代理对象可以在实际对象与客户端中间起到中介的作用。
组成:
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
作用:
真实角色只需要关心自己应该实现的功能,不需要关心其他非本职责的事务;
代理对象可以在实际对象与客户端中间起到中介的作用,同时保护了真实角色;
可以在代理角色中添加功能,而不需要更改真实角色本身的代码,符合开放-封闭原则。
根据不同的使用情况,可以将代理模式分为以下4类:
1. 远程代理:是为一个对象在不同的地址空间提供局部代表,用于隐藏一个对象存在于不同地址空间的事实;
2. 虚拟代理:是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的对象,以达到性能的最优化;
如我们在使用浏览器加载网页时,即使网页有很多图片,也可以很快的打开网页,而图片部分可能只是用空白区域块代替。那些未打开的空白图片框,就是使用虚拟代理来代表了真实的图片。
3. 安全代理:用来控制真实对象访问时的权限;
4. 只能指引:指当调用真实对象时,代理处理另外一些事情。比如计算真实对象的引用此时,当引用次数为0时自动释放。