设计模式:代理模式

一、理解

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。从模式的命名我们就可以意识到,应该是通过一个类代替另一个类进行相关的操作,类似于使用者的意思。“你授权给我使用你的功能,我可以在这个地方代替你行事相应的功能”,值得注意的是,代理行使的功能其实就是功能所有者的功能。以下是代理模式的功能图:

设计模式:代理模式

那就有人会问,我既然能使用某各类的功能,我为什么要多此一举,找一个代理类行使功能呢?那么这就涉及了代理模式的应用,其实代理模式的应用很广泛,它大致有以下几种应用。第一,就是远程代理,也就是一个对象在不同地址空间提供局部代代表,这样就可以隐藏一个对象存在不同地址空间的事实、就比如你在.NET的Web应用中引用WebService,此时就会在项目中生成一个WebReference的文件和一些文件夹,其实这些就是代理,使得客户端只要调用代理,就可以解决远程访问的问题。第二,就是虚拟代理,就是根据需要创建开销很大的对象,通过它来存放实例化需要时间很长的对象,这样就能达到性能的最优化。第三,就是安全代理,用来控制真实对象访问时的权限,一般用于对象有不同访问权限的时候。第四,就是智能指引,是指当调用真实对象时,代理处理另一些事情。

二、实现

public abstract class Subject {
	public abstract void Request();
}
public class RealSubject extends Subject {

	@Override
	public void Request() {
		// 真实需求的操作

	}

}
public class Proxy extends Subject {
	RealSubject realSubject;

	@Override
	public void Request() {
		if(realSubject == null) {
			realSubject = new RealSubject();
		}
		realSubject.Request();
	}

}
public class Main {

	public static void main(String[] args) {
		Proxy proxy = new Proxy();
		proxy.Request();

	}

}