| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
前几天一个网友指出了我的文章中一些有失偏颇之处,那些文章都是我在阅读Java Core的时候做的总结,顺便加上我个人的一些理解。因为看的e文版,理解上有些地方可能还欠妥。下面谈一下对Java中代理模式(Proxy)的认识。 网管bitscn_com
代理,想必大家都应该知道是什么冬冬了,一般的手机产商都有代理商,歌星们都有自己的经纪人,如此这些都可以看作是一种代理模式。下面我选择如下的一种情景来进行讲述:某董事长出差,但是此时公司有个聚会,董事长买单,但是由他的秘书去结帐。我们就权且把这个看作一个代理行为,^_^。 网管下载dl.bitscn.com
首先我们定义一个接口:商人(Merchant),如下所示:
网管u家u.bitscn@com
package cn.edu.hust.cm.test; 网管u家u.bitscn@com
public interface Merchant {
void treat();//商人都要请客吃饭滴,^_^ 网管论坛bbs_bitsCN_com
} 中国网管论坛bbs.bitsCN.com
然后我们定义一个类:董事长(Director),如下所示:
package cn.edu.hust.cm.test;
中国网管论坛bbs.bitsCN.com
public class Director implements Merchant {
public Director() { 网管bitscn_com
}
网管下载dl.bitscn.com
public void treat() { 网管网www.bitscn.com
System.out.println("董事长请大家吃饭"); 网管网www_bitscn_com
} 网管网www.bitscn.com
} 网管网www_bitscn_com
OK,我们现在要给他找代理了,这个代理就是他的秘书(Secretary)。这里要涉及到一些代理的机制了。在Java中,用来做代理的类一般都要实现InvocationHandler,实现它的invoke方法,至于为啥是这样俺也不知道了,^_^。另外,当我们产生一个代理实例(proxy instance)的时候,只要我们通过这个实例调用任何方法,都会导致invoke方法的调用,还是看例子吧,如下所示: 网管u家u.bitscn@com
package cn.edu.hust.cm.test; 网管bitscn_com
网管网www.bitscn.com
import java.lang.reflect.InvocationHandler; 网管网www.bitscn.com
import java.lang.reflect.Method; 中国网管论坛bbs.bitsCN.com
网管网www_bitscn_com
public class Secretary implements InvocationHandler {
网管论坛bbs_bitsCN_com
public Secretary(Director director) { 网管u家u.bitscn@com
this.director=director; 网管联盟bitsCN@com
} 网管下载dl.bitscn.com
public Object invoke(Object arg0, Method arg1, Object[] arg2) 网管论坛bbs_bitsCN_com
throws Throwable { 网管联盟bitsCN@com
director.treat(); 网管联盟bitsCN_com
System.out.println("由秘书结帐咯!"); 网管下载dl.bitscn.com
return null;
网管u家u.bitsCN.com
} 网管论坛bbs_bitsCN_com
private Director director;
网管u家u.bitscn@com
} 网管网www_bitscn_com
网管u家u.bitscn@com
|
0
|
评论加载中…