欢迎来到天天文库
浏览记录
ID:45531556
大小:44.50 KB
页数:10页
时间:2019-11-14
《代理模式的核心思想与应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、12.3 代理模式(Proxy)本节从以下几个方面来详细讲解代理模式:Ø 代理模式的核心思想。Ø 何时使用代理模式。Ø Java中的应用—Java动态代理机制。12.3.1 代理模式的核心思想代理模式就是给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。就是一个人或者一个机构代替另一个人或者另一个机构去采取一些行动。代理模式中的代理者就好比中介机构,它提供了对被代理对象的一切事物。代理模式与适配器模式和装饰器模式相似,它们之间的区别是:Ø 适配器模式是将一个类A转换成另一个类B。Ø 装饰器模式是为
2、一个类A增加新的功能,从而变成类B。Ø 代理模式是为一个类A转换操作类B。它们三者的限制条件层层递进,递进关系如图12-16所示。图12-16 代理模式递进关系代理模式中的“代理”要想实现代理任务,就必须与被代理的“对象”使用共同的接口。所以自然而然你会想到在Java中使用一个抽象类或者接口(推荐)来实现这个共同的接口。于是代理模式就有3个角色组成。Ø 被代理对象的接口Sourcable:声明了代理对象和代理者的共同接口。Ø 被代理对象Source:定义真实的对象。Ø 代理者Proxy:内部包含对代理对象的引用,
3、并且提供与代理对象角色相同的接口。使用类图来表示下三者间的关系如图12-17所示。图12-17 代理模式结构图下面来看具体的实现。(1)Sourcable类的源代码如程序12-28所示,其定义了一个接口函数operation()。程序12-28 源接口Sourcable.javapackagestructure.proxy;/** *@authorliuzhongbing *源接口 */publicinterfaceSourcable{ publicvoidoperation();}(2)Source.java是Sourca
4、ble.java的一个实现,其函数operation()负责往控制台输出一个字符串:原始类的方法。其源代码如程序12-29所示。程序12-29 源类Source.javapackagestructure.proxy;/** *@authorliuzhongbing *源类 */publicclassSourceimplementsSourcable{ publicvoidoperation(){ System.out.println("原始类的方法"); }}(3)代理类Proxy.java采用了典型的对象适
5、配器模式,它首先拥有一个Sourcable对象source,注意,不同的是该对象在构造函数中进行初始化,不能够从外部传入。然后它实现了Sourcable.java接口,以期保持与source同样的接口,并在重写的operation()函数中调用source的operation()函数,在调用前后可以调用自己的函数。其源代码如程序12-30所示。程序12-30 代理类Proxy.javapackagestructure.proxy;/** *@authorliuzhongbing *代理模式 */publicclassProxyi
6、mplementsSourcable{ privateSourcesource; /** *创建代理对象 */ publicProxy(){ super(); this.source=newSource(); } /** *调用代理对象的方法 */ publicvoidoperation(){ before(); source.operation(); after(); } publicvoidbefore(
7、){ System.out.println("代理前"); } publicvoidafter(){ System.out.println("代理后"); }}这时,我们就可以直接通过Proxy来操作Source类。如程序12-31所示,首先需要创建一个代理对象proxy,然后直接调用该对象的operation()方法,即可实现对source的调用。程序12-31 测试类Client.javapackagestructure.proxy;/** *@authorliuzhongbing
8、*/publicclassClient{ publicstaticvoidmain(String[]args){ //创建代理对象 Sourcableproxy=newProxy(); //调用代理对象的方法
此文档下载收益归作者所有