读书人

Java的署理模式(通过公共接口实现)

发布时间: 2012-10-19 16:53:36 作者: rapoo

Java的代理模式(通过公共接口实现)

代理模式的一种常见的实现方案是,定义一个接口或抽象类,并派生出目标子类,和代理子类。我们要操作的是目标子类里的方法,而很多时候,我们需要为目录子类中的方法增加额外的处理,如果增加日志功能、条件判断等,这时候,就很有必要用到代理类。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/**
?*?代理子类和目标子类的公共接口
?*?@author?rongxinhua
?*
?*/
public?interface?MyInterface?{
????
????public?void?doOperation();

}

?

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/**
?*?目标子类
?*?@author?rongxinhua
?*
?*/
public?class?RealClass?implements?MyInterface?{

????/**
?????*?我们要执行的目标方法
?????*/
????@Override
????public?void?doOperation()?{
????????System.out.println("doOperationJava的署理模式(通过公共接口实现)");
????}

}


而在没有使用代理模式的情况下,我们是这样执行目标方法的:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->????????RealClass?realObj?=?new?RealClass();
????????realObj.doOperation();????//调用目标方法

打印时输出:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->doOperationJava的署理模式(通过公共接口实现)



而我们要加入额外的处理的话,就可以使用代理类了:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/**
?*?代理子类
?*?@author?rongxinhua
?*
?*/
public?class?ProxyClass?implements?MyInterface?{

????private?MyInterface?realObj;????//目标子类对象
????
????public?ProxyClass(MyInterface?realObj)?{
????????this.realObj?=?realObj;
????}
????
????/**
?????*?调用目标子类的方法,并在其中加入了前置处理和后置处理
?????*/
????@Override
????public?void?doOperation()?{
????????doBefore();
????????realObj.doOperation();
????????doAfter();
????}
????
????/**
?????*?目标方法调用前的相关处理
?????*/
????private?void?doBefore()?{
????????System.out.println("doBeforeJava的署理模式(通过公共接口实现)");
????}
????
????/**
?????*?目标方法调用后的相关处理
?????*/
????private?void?doAfter()?{
????????System.out.println("doAfterJava的署理模式(通过公共接口实现)");
????}

}


有了代理类,我们可以这样执行目标方法:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->????????ProxyClass?proxyObj?=?new?ProxyClass(new?RealClass());
????????proxyObj.doOperation();????//通过代理对象调用doOperation方法


打印时输出:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->doBeforeJava的署理模式(通过公共接口实现)
doOperationJava的署理模式(通过公共接口实现)
doAfterJava的署理模式(通过公共接口实现)


本文只是代理模式的在Java中的简单使用,而代理模式与Java反射机制的整合,为Java组件开发增加了强大的生命力.

读书人网 >软件架构设计

热点推荐