设计模式学习十五:代理模式
一.概念
???? 代理模式:为对象提供一种代理,以控制这个对象的访问。
?
二.UML
?
三.实例分析
???? 在深圳这个神奇的国度里,最有钱的其实是那些房东。这还得感谢我们伟大的小 平同志。以前不值钱的房子,现在租客多了,原地随便盖个十几层,一年下来百来万是一点问题都没有的。房东是基本不出现的,整个租房,收钱都是别人在帮他搞,也就是我们说的房屋中介。
?
???? Renter
package com.zzy.proxy;/** * 租客接口 * @author eason * */public interface Renter {//租房void rent();//收房租void getMoney();}
?
??? HouseOwner
package com.zzy.proxy;/** * 房主 * 真实对象 * 被代理对象 * @author eason * */public class HouseOwner implements Renter{@Overridepublic void getMoney() {System.out.println("收取房租100W");}@Overridepublic void rent() {System.out.println("出租房屋一年");}}
?
?? Agency
package com.zzy.proxy;/** * 房屋中介 * 代理对象 * @author eason * */public class Agency implements Renter{private HouseOwner houseOwner;//客户端不需要HouseOwner实例//客户因为Agency就是HouseOwnerpublic Agency() {this.houseOwner = new HouseOwner();}@Overridepublic void getMoney() {houseOwner.getMoney();}@Overridepublic void rent() {houseOwner.rent();}}
?
? ? ProxyTest
package com.zzy.proxy;/** * 测试类 * @author eason * */public class ProxyTest {public static void main(String[] args) {Agency agency = new Agency();agency.rent();agency.getMoney();}}?
?
四.使用场景及使用感受
防火墙代理(Firewall Proxy):控制网络资源的访问,保护主题免于"坏客户"的侵害。智能引用代理(Smart Reference Proxy):当主题被引用时,就行额外的动作,例如计算一个对象被引用的次数。缓存代理(Caching Proxy):为开销大的运算结果提供暂时存储,它也允许多个客户共享结果,以减少计算或网络延迟。同步代理(Synchronization Proxy):在多线程的情况下提供安全的访问。复杂隐藏代理(Complexity Proxy):用来隐藏一个类的复杂集合的复杂度,并进行访问控制。有时候也称为外观代理(Facade Proxy)。区别外观代理模式和外观模式:外观代理模式归根到底还是代理模式,是代理模式就是为了控制访问,而外观模式只提供另外一组接口。写入时复制代理(Copy-On-Write Proxy):用来控制对象的复制,方法是延迟对象的复制,直到客户真的需要为止。
?