統(tǒng)一接口
提供一個同一的接口同目標對象與裝飾對象實現(xiàn)
/**
* 統(tǒng)一接口
*/
interface Filterable {
public void filter();
}
目標對象
/**
* 目標類
*/
public class Filter implements Filterable{
@Override
public void filter() {
System.out.println("目標類過濾的核心方法");
}
}
目標對象包裝類
在調用目標對象業(yè)務方法前后,可以有選擇的執(zhí)行自定義的增強方法
public class DecoratorForFilter implements Filterable{
private Filterable filterable;
public DecoratorForFilter(Filterable filterable) {
this.filterable = filterable;
}
private void beforeMethod() {
System.out.println("目標方法執(zhí)行之前,執(zhí)行的增強方法");
}
private void afterMeshod() {
System.out.println("目標方法執(zhí)行之后,執(zhí)行的增強方法");
}
@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);
// 執(zhí)行包裝后的業(yè)務方法
dfFilter.filter();
}
}