装饰者模式(Decorator)

2018-09-26  本文已影响0人  tingshuo123
统一接口

提供一个同一的接口同目标对象与装饰对象实现

/**
 * 统一接口
 */
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();
    }
}
上一篇下一篇

猜你喜欢

热点阅读