Java代理之代理模式

Java代理之设计模式

1 概述 

代理模式(Proxy Pattern)是结构型设计模式中的一种,它通常为其他对象提供一种代理机制以增强和控制对该对象的访问,但不改变原来的对象本身的结构。代理一般可以作为与对象交互的接口,这些对象包括:网络连接对象、远程对象、创建一次需要很大开销的对象、需要保护的对象、内存中的大对象、需要附加线程安全的对象、需要在原来的功能上附加或扩展的对象等等。

2 实现途径

Java编程语言有其自身的特点,在Java语言中,实现设计模式的途径主要有两种:通过实现接口的方式和通过继承超类的方式。

2.1 实现接口的方式

实现接口方式的代理如下图所示:

实现接口方式的代理

 图 1     实现接口的方式 

在这种方式中,代理类ProxySubject和被代理的类RealSubject都实现(implements)了相同的接口ISubject,但是代理类和被代理类之间存在关联。其他的协作者Collaborator实际上和ProxySubject交互,不管是出于自身的利益还是被代理对象的利益,ProxySubject在RealSubject行为的执行之前和之后都可以加入自己的特定的行为。ProxySubject的示例代码如下:

     

2.2 继承超类的方式

继承超类方式的代理如下图所示:

继承超类的方式

图2 继承超类的方式 

在这种方式中,代理类ProxySubject和被代理的类RealSubject是继承关系(extends),是子类和父类的关系。其他的协作者Collaborator实际上和ProxySubject交互。ProxySubject根据面向对象语言的多态性,利用覆写(overwrite)机制,在父类RealSubject行为的执行之前和之后都可以加入自己的特定的行为。ProxySubject的示例代码如下:

3 比较分析

在被代理的对象的类有接口的情况下,可以使用实现接口的方式,也可以采用继承超类的方式。在被代理的类没有接口的情况下,只能使用继承超类的方式。在继承超类的方式下,但是如果超类中定义有final的方法 ,该方法是无法被代理的;如果该类是final的类,则该类是无法被代理的。

在上述无法代理的情况下,可以考虑使用委托模式,代理类定义和被代理的类一样的方法,并且和被代理类关联,也可以实现代理,但是失去了面向对象的继承性和多态性。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值