1.代理模式的介绍
我是这么理解代理模式的:大熊突然收到短信说快递到了,但是他现在正在写作业没时间去拿快递,所以他只好委托哆啦A梦帮忙他去拿快递。在这个过程中共出现了代理模式的三个角色,主题接口----即拿快递,是大熊委托哆啦A梦要做的事;真实主题----大熊,想要去拿快递但没时间;代理类----哆啦A梦,真正做事的人。
2.代理模式的结构
角色 | 作用 |
主题接口 | 定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法 |
真实主题 | 真正实现业务逻辑的类 |
代理类 | 用来代理和封装真实主题 |
Main | 客户端,使用代理类和主题接口完成一些工作 |
3.代理模式的实现
基于以上设计,IEMSRequest实现如下
public interface IEMSRequest
{
public String request();
}
EMSRequest实现如下,它是一个重量级对象,构造会比较慢。
public EMSRequest implements IEMSRequest
{
public EMSRequest()
{
try
{
Thread.sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Override
public String request()
{
return "request string";
}
}
代理类EMSRequestProxy是轻量级对象,创建很快,用于代替EMSRequest的位置。
public EMSRequestProxy implements IEMSRequest
{
private EMSRequest real = null;
@Override
public string request()
{
//在真正需要的时候,才创建真实独享,创建过程可能很慢
if(real == null)
{
real = new EMSRequest();
}
return real.request();
}
}
最后,主函数中,他引用IEMSRequest接口,并使用代理类工作。
public class Main
{
public static void main(String[] args)
{
IEMSRequest q = new EMSRequestProxy();
q.request();
}
}
这就是整个代理模式的介绍。