代理模式的理论在前面的一条博文 JAVA基于反射动态代理 说过了,因为这篇代理模式更侧重说一些理论性的东西,所以侧重点放在了静态代理上,九层之台,起于垒土,明白了静态代理也就很容易理解动态代理了(动态代理是在静态代理的基础上加上了编程的的智慧和技巧)。
代理模式中代理类和真实类要实现相同接口,为什么要实现相同接口呢?这要从代理模式的目的说起,它的目的就是代理真实类,当然,想代理真实类也不能什么都不做上去就代理,当然要先和真实类拉近一下关系了。就好像我们IT行业某些著名打印机、交换机厂商需要代理,也不是随便谁都能代理销售他们的产品的,需要得到这些厂商的认可才行,
而我们代理模式中,真实类怎样才觉得代理类有资格代理它而不显唐突呢,实现共同接口,好了,实现了共同接口就是自家人了,可以代理了。
代理模式UML类图:
实例代码:
接口类(真实类和代理类共同接口):
public interface Interface {
void method();
}
真实类(被代理的类):
/*****
* 真实类(被代理类)
* @author wjw
*
*/
public class RealClass implements Interface{
@Override
public void method() {
// TODO Auto-generated method stub
System.out.println("系统运行");
}
}
代理类:
/*****
* 代理类
* @author wjw
*
*/
public class Proxy implements Interface{
private Interface inter = new RealClass();;
@Override
public void method() {
// TODO Auto-generated method stub
System.out.println("权限验证!");
inter.method();
}
}
Main类:
public class Main {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.method();
}
}
运行结果:
权限验证!
系统运行
如上实例代码所示,代理模式的产生也是有目的的,就是我们通过代理类可以增加真实类不具有的功能,比如权限验证,比如日志等。这样扩展起来也很容易,对现有代理类不满意,想增加功能,再扩展一个代理类,实现相同接口即可。
以上只是很简单的代理模式说明,在真实应用中代理模式用处非常多,功能也非常强大,需要好好体会琢磨才能明白代理模式的牛X之处。
如有错误,欢迎指正
end