面向切面的编程,我的理解是能够在所要执行的代码前和执行完成后,添加相关的内容。举例说明,int divide(int a,int b)除法函数,算出a/b并返回,现在想要在执行divide函数前添加验证的功能,以及执行完成之后输出结果,可以利用面向切面编程的思想实现,具体如下:
Caculator接口
public interface Calculator {
public int divide(int a,int b);
}
CalculatorImpl实现了Calculator接口
public class CalculatorImpl implements Calculator{
@Override
public int divide(int a, int b) {
return a/b;
}
}
DivideProxy实现Calculator静态代理
public class DivideProxy implements Calculator{
private CalculatorImpl calculator;
public DivideProxy(CalculatorImpl divide){
this.calculator=divide;
}
private boolean before(int b){
if(b==0){
return false;
}
return true;
}
private void after(int result){
System.out.println("结果是:"+result);
}
@Override
public int divide(int a, int b) {
if(this.before(b)==false){
System.out.println("被除数等于0!");
return 0;
}
int result=calculator.divide(a, b);
this.after(result);
return result;
}
}
实现divide接口函数时,先执行before,然后再执行divide,最后再执行after。
客户端调用
public static void main(String args[]){
Calculator cal=new DivideProxy(new CalculatorImpl());
cal.divide(1, 1);
}
采用切面编程的好处是降低代码之间的耦合度,然后让函数只关注自己的逻辑。