代理模式
为什么需要代理模式
当我们需要访问外部资源的时候,由于我们自己网络限制,我们不能够访问到外部资源,但是如果有一个主机,可以我们访问外部的资源,然后将外部资源存放到存储设备上,然后我们可以访问这个存储设备来获取我们想要的资源。在这里这个主机扮演者代理的角色,帮助我们获取我们需要的资源,因此,我们需要代理模式来帮助我们实现我们自身不能实现的需求。
什么是代理模式
给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
核心思想
通过代理类返回需要的资源,代理类是真实需求和目标资源的连通枢纽。
具体案例
模拟使用代理访问外部资源
UML:
代码
package com.dong.proxy;
public interface AccessResource {
public void request(String url);
public void response(float id);
}
package com.dong.proxy;
public class localhost implements AccessResource{
@Override
public void request(String url) {
System.out.println("发送请求到" + url);
}
@Override
public void response(float id ) {
System.out.println("已经获得资源 ,编号为" + id);
}
}
package com.dong.proxy;
import java.util.Random;
public class Proxy implements AccessResource{
private localhost local;
Random random = new Random();
float str = random.nextFloat();
public Proxy(localhost local) {
super();
this.local = local;
}
@Override
public void request(String url) {
local.request("proxy host");
System.out.println("proxy host start access the "+ url);
System.out.println("proxy Host Access the " + url+ " and store the resource");
System.out.println("localhost Start access proxy host resource");
System.out.println("Access end !!!" );
this.response(str);
}
@Override
public void response(float id) {
System.out.println("return the resouce , 编号" + id );
local.response(id);
}
}
package com.dong.proxy;
/**
* 运行结果:
* 发送请求到proxy host
proxy host start access the www.google.com
proxy Host Access the www.google.com and store the resource
localhost Start access proxy host resource
Access end !!!
return the resouce , 编号0.69638914
已经获得资源 ,编号为0.69638914
* @author liuD
*
*/
public class client {
public static void main(String[] args) {
localhost host =new localhost();
Proxy proxy = new Proxy(host);
proxy.request("www.google.com");
}
}
优点
简单,方便,直接,
扩展方便,当我们使用代理,不可以一步得到我们需要的结果,我们可以使用多个代理来实现我们需要的结果。
对于原始的请求到达一定的保密机制。
缺点
过于依赖代理角色。