大话设计模式

《大话设计模式》

第80章

上一页 封面 下一页

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

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

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

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

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

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

/**

**AngelSoftware,Inc.

*Copyright(C):

*Description:

*TODO标的类

*RevisionHistory:

*/

publicclassTargetImplimplementsTarget1,Target2

publicvoiddoSomething

(“doSomething!”);

publicStringdo1(Stringmsg)

//TODOAuto-generatedmethodstub

(do1:+msg);

return“thisisStringMehtod!”;

publicintdo2

(“do2!”);

return1000;

/**

*Copyright(C):

*Description:

*TODO标的接口

*RevisionHistory:

*wanginitialversion.

*/

publicinterfaceTarget1

voiddoSomething;

/**

*Copyright(C):

*Description:

*TODO标的接口

*RevisionHistory:

*wanginitialversion.

*/

publicinterfaceTarget2

Stringdo1(Stringmsg);

intdo2;

/**

*Description:

*TODO拦载类

*RevisionHistory:

*wanginitialversion.

*/

publicclassIntercept

publicvoidbefore

(“Before……”);

publicvoidafter

(“After.”);www.smrhm.com 幻想小说网

2、静态代理特征部分

/**

**AngelSoftware,Inc.

*Copyright(C):

*Description:

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

*/

publicclassInvocation

publicObjectinvokeDoSomething

TargetImplt=newTargetImpl;

Interceptp=newIntercept;

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

www.youxs.org;

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

www.youxs.org;

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

www.youxs.org;

returnnull;

/**

*Description:

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

*RevisionHistory:

*wanginitialversion.

*/

publicclassTest

publicstaticvoidmain(Stringargs)

www.youxs.org;

3、动态代理特征部分

/**

**AngelSoftware,Inc.

*Copyright(C):

*Description:

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

*RevisionHistory:

*wanginitialversion.

*/

publicclassInvocationimplementsInvocationHandler

publicObjectinvoke(Objectproxy,Methodmethod,Objectargs)

throwsThrowable

TargetImplt=newTargetImpl;

Interceptp=newIntercept;

if(args!=null&……1)

//更改参数

args[0]=“paramvaluehaschanged”;

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

www.youxs.org;

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

Objecto=(t,args);

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

www.youxs.org;

returno;

/**

*Copyright(C):

*Description:

*TODO测试类

*/

publicclassTest

/**

*logic1与logic的共同逻辑

*amproxy代理

*/

privatestaticvoidpublicLogic(Objectproxy)

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

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

Target1t1=(Target1)proxy;

www.youxs.org;

//对目标接口Target2的调用

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

Target2t2=(Target2)proxy;

(TargetMehoddo1return:“+www.youxs.org(”hello!));

(TargetMehoddo2return:+www.youxs.org);

/**

*newClass{,}

*正常

*urn

*/

publicstaticvoidlogic1

Invocationiv=newInvocation;

/*

*的参数说明

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

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

*参数3:www.youxs.org,解开标的类与拦载类之间的耦合,使它们之间可以互不关心

*/

Objectproxy=(.getContextClassLoader,newClass{,},iv);

publicLogic(proxy);

/**

*newClass{}

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

*urn

*/

publicstaticvoidlogic2

Invocationiv=newInvocation;

/*

*的参数说明

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

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

*参数3:www.youxs.org,解开标的类与拦载类之间的耦合,使它们之间可以互不关心

*/

Objectproxy=(.getContextClassLoader,newClass{},iv);

publicLogic(proxy);

publicstaticvoidmain(Stringargs)

logic1;

logic2;

阅读大话设计模式最新章节 请关注米妮小说网(www.qixinyuan.com.cn)

上一页 目录 下一页 存书签

热门推荐