统一接口
提供一个同一的接口同目标对象与装饰对象实现
/**
* 统一接口
*/
interface Filterable {
public void filter();
}
目标对象
/**
* 目标类
*/
public class Filter implements Filterable{
@Override
public void filter() {
System.out.println("目标类过滤的核心方法");
}
}
目标对象包装类
在调用目标对象业务方法前后,可以有选择的执行自定义的增强方法
public class DecoratorForFilter implements Filterable{
private Filterable filterable;
public DecoratorForFilter(Filterable filterable) {
this.filterable = filterable;
}
private void beforeMethod() {
System.out.println("目标方法执行之前,执行的增强方法");
}
private void afterMeshod() {
System.out.println("目标方法执行之后,执行的增强方法");
}
@Override
public void filter() {
// 增强方法
this.beforeMethod();
// 目标方法
this.filterable.filter();
// 增强方法
this.afterMeshod();
}
}
测试
实际上我们调用的是包装类,只是在包装类内部调用了目标的方法
public class TestMain {
@Test
public void test() {
// 目标对象
Filter filter = new Filter();
// 对目标对象进行包装
DecoratorForFilter dfFilter = new DecoratorForFilter(filter);
// 执行包装后的业务方法
dfFilter.filter();
}
}