首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计方式初探(八)之Proxy代理

2012-09-24 
设计模式初探(八)之Proxy代理基本上代理做的事情就是被代理能做的所有事情,或者做的更多,你会去在代理类中

设计模式初探(八)之Proxy代理

基本上代理做的事情就是被代理能做的所有事情,或者做的更多,你会去在代理类中声明一个被代理类的变量,然后将调用的信息传递给它,事实上是通过它去执行操作的。代理是一个很不错的模式,我更想叫他们公式,数学中是这样的,我喜欢数学。在结构型模式中,adpter,decorator,composite,都是这样的,通过封装一个需要实际履行职能的接口的变量,然后对其进行不同目的的修饰和解释,GOF的书中关于结构模式额度总结我看到很多“aim to”之类的,或者说看待它们的角度不一样:

?

import java.lang.reflect.*;interface ProxyInterface{        public void doSomeThing();}public class ProxyTest{        public static void main(String args[]){                ProxyInterface proxy = (ProxyInterface) Proxy.newProxyInstance(                                        ProxyInterface.class.getClassLoader(),new Class[]{ProxyInterface.class},new InvocationHandler(){                                        public Object invoke(Object proxy,Method method,Object[] args){                        int count = 0;                        System.out.println("doSomeThing! "+(++count)+" time");                        return null;                        }                });                for(int i=0;i<10;++)                        proxy.doSomeThing();        }

?我喜欢这段代码,动态的给某接口的方法创建一个代理,而不是在客户端中更改其调用的具体代码,并且可以实现计数!

java的动态代理类做的事情太丰富了,不管是查看数据库的查询的次数(我想这对于调试数据库性能很重要),还是对其进行事务管理,并且动态代理可以进行丰富的功能扩展。。。用代理进行调用计数貌似叫smart proxy,我想在spring中关于proxy的运用应该很多的吧。

代理在aop中的运用是很多的,因为你可能会选取到你想要进行额外操作的切面,那么用Proxy就很容易实现了:

class SessionImpl implements Session{        public void save(){                System.out.println("save object");        }class SessionProxy implements Session{        Session session = new Session();        public void save(){                doTransactionBefore();                session.save();                doTransactionAfter();        }}public class AspectProy{        public static Session getSession(){                return new SessionProxy();        }}
?

代码,你们懂的。。

热点排行