你不需要修改现有的代码或者它的接口,应用Gang of Four (GoF) Decorator 模式提供了一种添加AOP的途径。
假设我们有一个简单的接口:
public interface IMyBusinessObject {
public String doExecute(String in);
}
下面是这个接口的实现类
public class MyBusinessObject implements IMyBusinessObject {
public String doExecute(String in) {
System.out.println("Here in MyBusinessObject doExecute: input :" + in);
return in;
}
}
我们现在需要在执行doExecute方法之前和之后增加一些行为,Decorator 模式可以帮助我们很容易的实现。
首先定义一个 abstract decorator class
public abstract class ADecorator implements IMyBusinessObject {
protected IMyBusinessObject target;
public void setTarget(IMyBusinessObject target_) {
this.target = target_;
}
public ADecorator(){}
public ADecorator(IMyBusinessObject target_) {
setTarget(target_);
}
}
现在我们定义一个 DebugConcreteDecorator 扩展 ADecorator ,目的是在调用doExecute方法前后,添加Debug信息。
public class DebugConcreteDecorator extends ADecorator {
public String doExecute(String in) {
System.out.println("DebugConcreteDecorator: before method : doExecute ");
String ret = target.doExecute(in);
System.out.println("DebugConcreteDecorator: after method : doExecute ");
return ret;
}
}
在调用时,我们可以使用下面的代码。
IMyBusinessObject aIMyBusinessObject = new MyBusinessObject();
IMyBusinessObject wrappedObject =
new DebugConcreteDecorator(aIMyBusinessObject);
wrappedObject.doExecute("Hello World");
输出如下:
DebugConcreteDecorator: before method : doExecute
Here in MyBusinessObject doExecute: input :Hello World
DebugConcreteDecorator: after method : doExecute