话说代理模式,其实就是一个类想要完成的操作,通过它的好朋友proxy替它完成。那代理模式又分为静态代理和动态代理。
那今天就先来说一说静态代理模式。在大话设计模式中,看到大鸟是这样写的:
一个叫戴笠的男生,想追一个叫娇娇的女生,于是他就想到了一个办法去追求娇娇。就是每次都将自己想要送给娇娇的东西说成他的好朋友卓贾易送的,久而
久之娇娇也就看出来了,就和戴笠在一起了。
然后看完我的感受就是:
interface xxxProxy
class Pursuit (卓贾易) class Proxy (戴笠)
----→ ←-----
class TheGirl (娇娇)
实际的设计模型就是:
设计一个 代理接口:
然后 追求者类和代理者类都实现 代理接口
然而并不是两个类一模一样,代理者类中实现的 代理接口的方法中 调用的是 追求者实现的代理接口的方法
代理模式: 为其他对象提供一种代理以控制对这个对象的访问。
以struts2中的ActionProxy为例分析:
代理接口:
public interface Proxy{
String execute();
Action getAction();
ActionInvocation getActionInvocation();
}
真实类:
public class Action implements ActionProxy{
public String execute(){}
}
代理类:
public class ActionProxy implements Proxy{
private Action action;
public String execute(){
return action.execute();
}
}
那这样,一个静态的代理模式就基本完成了。但是实际的Struts2中的ActionProxy 用的是DynamicProxy模式,今天呢就暂时先讲一讲静态代理完成Struts2中的ActionProxy吧。
代理模式一般应用场景:
第一:远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
例如,当我在一个web应用中,引用struts框架,那我就需要导入一些jar包,然后会在项目中生成一些Library,其实它们就是代理。
第二:虚拟代理,是根据需求创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
例如,浏览器就是运用虚拟代理来优化下载的。
第三:安全代理,用来控制真实对象访问时的权限。
第四:智能指引,是指当调用真实的对象时,代理处理另外一些事。
那今后遇到这些场景,就可以运用代理模式,届时我们只需要分析出那个是代理者,那个是追求者即可完成充代理模式了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wild_elegance_k/article/details/47373719