码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式----代理模式

时间:2015-08-09 10:48:56      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:设计模式   静态代理   代理模式   

话说代理模式,其实就是一个类想要完成的操作,通过它的好朋友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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!