登陆注册
8183300000080

第80章 5 代理分类

小A:“代理分为哪些类?”

大B:“代理分为静态代理与动态代理。”

小A:“按功能怎么分类哩?”

大B:“按功能将代理的组成类分为:标的类、标的接口、拦截类、耦合类。”

下面以具本代码举例说明。

1、静态与动态代理的公共部分

package proxy。common;

/ *

**AngelSoftware,Inc。

*Copyright(C):

*Description:

*TODO 标的类

*

*Revision History:

*

*/

public class TargetImpl implements Target1,Target2

{

public void doSomething()

{

System。out。println(“doSomething!”);

}

public String do1(String msg)

{

//TODO Auto-generated method stub

System。out。println(do1: msg);

return“this is String Mehtod!”;

}

public int do2()

{

System。out。println(“do2!”);

return 1000;

}

}

package proxy。common;

/ *

*

*

*Copyright(C):

*

*Description:

*TODO 标的接口

*

*Revision History:

*wanginitial version。

*

*

*/

public interface Target1

{

void doSomething();

}

package proxy。common;

/ *

*

*

*Copyright(C):

*

*Description:

*TODO 标的接口

*

*Revision History:

*wang initial version。

*

*

*/

public interface Target2

{

String do1(String msg);

int do2();

}

package proxy。common;

/ *

*

*

*Description:

*TODO 拦载类

*

*Revision History:

*wang initial version。

*

*

*/

public class Intercept

{

public void before()

{

System。out。println(“Before……”);

}

public void after()

{

System。out。println(“After。”);

}

}

2、静态代理特征部分

package proxy。jingtai;

import proxy。common。Intercept;

import proxy。common。TargetImpl;

/ *

**AngelSoftware,Inc。

*Copyright(C):

*

*Description:

*TODO 耦合类(耦合是为了解耦)

*

*

*

*/

public class Invocation

{

public Object invokeDoSomething()

{

TargetImpl t=new TargetImpl();

Intercept p=new Intercept();

//调用真实的标的类的方法之前置入拦载类的方法

p。before();

//调用真实的标的类的方法

t。doSomething();

//调用真实的标的类的方法之后置入拦载类的方法

p。after();

return null;

}

}

package proxy。jingtai;

/ *

*

*

*Description:

*TODO 静态代理(这理只简单地讲一下,着重讲动态代理)

*

*Revision History:

*wang initial version。

*

*

*/

public class Test

{

public static void main(String args[])

{

new Invocation()。invokeDoSomething();

}

}

3、动态代理特征部分

package proxy。dongtai;

import java。lang。reflect。InvocationHandler;

import java。lang。reflect。Method;

import proxy。common。Intercept;

import proxy。common。TargetImpl;

/ *

**AngelSoftware,Inc。

*Copyright(C):

*

*Description:

*TODO 耦合类(耦合是为了解耦)

*

*Revision History:

*wang initial version。

*

*

*/

public class Invocation implements InvocationHandler

{

public Object invoke(Object proxy,Method method,Object[]args)

throws Throwable

{

TargetImpl t=new TargetImpl();

Intercept p=new Intercept();

if(args!=null&args。length……1)

{

//更改参数

args[0]=“param value has changed”;

}

//调用真实的标的类的方法之前置入拦载类的方法

p。before();

//调用真实的标的类的方法

Object o=method。invoke(t,args);

//调用真实的标的类的方法之后置入拦载类的方法

p。after();

return o;

}

}

package proxy。dongtai;

import proxy。common。Target1;

import proxy。common。Target2;

/ *

*

*

*Copyright(C):

*

*Description:

*TODO 测试类

*

*

*

*/

public class Test

{

/ *logic1与logic的共同逻辑

*@param proxy 代理

*/

private static void publicLogic(Object proxy)

{

//对目标接口Target1代理的调用

System。out。println(“对目标接口Target1代理的调用”);

Target1 t1=(Target1)proxy;

t1.doSomething();

System。out。println();

//对目标接口Target2的调用

System。out。println(“对目标接口Target2代理的调用”);

Target2 t2=(Target2)proxy;

System。out。println(Target Mehod do1 return:“ t2.do1(”hello!));

System。out。println(Target Mehod do2 return: t2.do2());

System。out。println();

System。out。println();

}

/ *new Class[]{Target2.class,Target1.class}

*正常

*@return

*/

public static void logic1()

{

Invocation iv=new Invocation();

/*

*Proxy。newProxyInstance的参数说明

*参数1:类加载器(个人感觉这个参数有点多佘,这个参数完成可以去掉,不知当初他们为何要设这个参数干么)

*参数2:代理的标的接口。就是说,你要代理的标的类可能会实现多个接口,你可以有选择性地代理这些接口

*参数3:InvocationHandler的实现类。InvocationHandler接口做用就是解耦,解开标的类与拦载类之间的耦合,使它们之间可以互不关心

*/

Object proxy=java。lang。reflect。Proxy。newProxyInstance(Thread。currentThread()。getContextClassLoader(),new Class[]{Target2.class,Target1.class},iv);

publicLogic(proxy);

}

/ *new Class[]{Target1.class}

*将会出异常,因为他没有在参数中声时自己要调用Target2接口,而后面却又去调用

*@return

*/

public static void logic2()

{

Invocation iv=new Invocation();

/*

*Proxy。newProxyInstance的参数说明

*参数1:类加载器(个人感觉这个参数有点多佘,这个参数完成可以去掉,不知当初他们为何要设这个参数干么)

*参数2:代理的标的接口。就是说,你要代理的标的类可能会实现多个接口,你可以有选择性地代理这些接口

*参数3:InvocationHandler的实现类。InvocationHandler接口做用就是解耦,解开标的类与拦载类之间的耦合,使它们之间可以互不关心

*/

Object proxy=java。lang。reflect。Proxy。newProxyInstance(Thread。currentThread()。getContextClassLoader(),new Class[]{Target1.class},iv);

publicLogic(proxy);

}

public static void main(String args[])

{

logic1();

logic2();

}

}

同类推荐
  • 如何操作电脑

    如何操作电脑

    信息社会是科技、文化发展,知识爆炸的结果。不懂得计算机,将处于半文盲的境地。因此,对于计算机,不仅要作为工具使用,已经是一项文化普及的要求。我们不仅要会使用计算机做一些诸如文字处理等具体工作,更要培养一种计算机意识。
  • 如何处理电脑故障

    如何处理电脑故障

    本书以问答的方式介绍了电脑会出现的各种故障,内容包括了音箱声音失真,如何处理?如何做好电脑的日常维护等等问题。
  • 中文版AutoCAD2005建筑绘图精讲精学

    中文版AutoCAD2005建筑绘图精讲精学

    本书从中文版AutoCAD2005建筑绘图的基础进行介绍,讲解了建筑绘图的环境设置、二维建筑图形的绘制、二维建筑及装饰图形的编辑、建筑绘图中的文字标注和图形查询、建筑装潢平面图中的尺寸标注、建筑绘图中图块的应用、建筑平面图的绘制、建筑立面图的绘制、建筑剖面图的绘制、建筑绘图中的三维造型、三维建筑模型绘制及建筑图纸的布局与打印输出等内容。
  • 从平凡到神奇

    从平凡到神奇

    本书结合多年的开店经验,全面地讲解了在淘宝网开设店铺的相关知识,为准备在淘宝网创业的卖家及刚刚创建店铺的店主,提供全面的开店和经营方面的指导。本书按照淘宝开店的流程安排内容,侧重每个步骤中的实际技巧。本书分3个部分:如何在淘宝开店、如何开好店、如何做强做大店铺。前3章介绍了在淘宝网开设店铺的基础知识,指导读者在开设店铺前做好准备工作,以及建立起自己的店铺,并且完成店铺的第一笔交易;第4章至第7章主要介绍了网店装修和推广的方法,以及网店的物流经验和技巧;第8章着重介绍了将网店做大做强的方法,帮助卖家在开店和经营中树立品牌意识,做大做强自己的店铺。
  • 综合应用软件设计

    综合应用软件设计

    本书是为计算机、信息管理等相关专业高年级本科生在开设相关课程时所编写的一本教学参考书,它将全面指导学生学习、熟悉和运用当今被广泛采纳的一些主流技术去进行综合应用软件设计的有效实践。
热门推荐
  • 促进青少年的100个开拓思维故事

    促进青少年的100个开拓思维故事

    《促进青少年的千万个成长故事》一书,在故事的海洋中,为你精心挑选了若干个精彩故事,它们或睿智、或感人、或生动,它们将会在你人生的航程上,点燃你的心灵之灯,开启你的智慧之门,使你成功地迈入意气风发的少年时代。
  • 穿越之我在江湖那些年

    穿越之我在江湖那些年

    正经版:因为一个神秘人,我穿越到古代武侠世界。两本神武秘籍,让久生不败。阴谋算计与我无关,却是总是让我深陷其中。本应黄土大道,走的尸山血。放眼千里天地苍茫,我以白头坐尸山。真实版:老马穿越了,为了活命苦炼神功。不知道为什么,总是,陷入各种各样的阴谋中。心塞(?-ω?`)
  • 永恒法则

    永恒法则

    阴阳逆乱起苍黄,自古仙道是沧桑……他说,仙途若有穷尽日,我以法则遮青天!
  • 瓜果蔬菜妙用(生活实用丛书)

    瓜果蔬菜妙用(生活实用丛书)

    “养生之道”在古今中外科学家、哲学家、思想家的研究领域都有涉及。人的存在不仅要满足基本的物质生活和精神生活的需要,随着人观念的进步,社会条件的改善,生活水准的提高,人们越来越关注如何使人类自身更好地生存。本书主要关涉的是与人们生命质量密切相关的内容——饮食中瓜果蔬菜的妙用。
  • Volume Six

    Volume Six

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。
  • 不要逼我用大号

    不要逼我用大号

    陈攻的口头禅是:劝你们不要惹我。因为下一秒他可能本性爆发,成为夷平一切的大杀器。一代天骄,登基前夜被仙人强收入天庭。佛前的三百年清修,才压制住他狂暴的天性。这次重回人间是为了韬光养晦?错,是要恢复武学记忆!夺回当年被兄长接手的帝王基业!最终枪指云霄,让满天神佛尽皆忏悔!
  • DEATH100DAYS

    DEATH100DAYS

    距离死亡还有100天,主人公是如何在自己的世界度过这最后的100天,平淡无奇还是充满欢乐还是郁郁寡欢,等等的一般人的生活。NO!NO!主人公的最后100天······来看看他最后的日记
  • 如果上帝放假了

    如果上帝放假了

    江小山坐在电脑前正嗨着游戏,怎么也没想到有个黑袍人突然出现在了屋里。“你还有七天时间,七天之后死神会带你走!”江小山杀的正欢,只当自己出现了幻听,“年纪轻轻就去死,有病吧!”可是,接下来发生的一切,他知道,自己真的要死了……
  • 大佬们团宠马甲掉了

    大佬们团宠马甲掉了

    都说莫家找回的亲生女儿是个由狼养大的野孩子,喜欢吃生肉,喜欢咬人,极丑无比。后来各个打脸现场,就问你们脸疼不疼。深渊集团官方公布:本集团董事长回来了,了解一下。德邦世医院宣布:我院著名外科医生,大家面熟一下。娱乐圈著名歌手发围博表示我的师傅五音不全,那我不配说话。莫家各个大佬表示他们的团宠被欺负,那那些人就接受他们独特的恩赐吧!莫珝琛:丫头,特别善良,怎么会欺负人呢?!莫泽琛:我的偶像加小妹,想欺负?问我了?莫臣聿:我师傅诶!我天天供起来的!什么时候轮到你们欺负了?莫七准丈夫憋嘴,特委屈:“媳妇,我们去哪里玩好呀?”
  • 无尽边缘之帝国

    无尽边缘之帝国

    为了她,苏雨忱毅然接下了任务,看似和平的各大势力组织之下是涌动的暗流,帝国的目的,可能不仅仅是移民那么简单……