定义一个算法结构,而将一些步骤延迟到子类实现。
典型案例:Spring中的BeanFactory对BeanPostProcessor的管理。
默认BeanFactory中没有任何BeanPostProcessor处理器,但是提供一个自定义处理器的集合,集合中存放的是一个接口类型;这样BeanFactory的使用者就可以在使用时候自定义处理器的逻辑。从而到达功能扩展。
public class TestMethodTemplatePattern {
    public static void main(String[] args) {
        MyBeanFactory beanFactory = new MyBeanFactory();
        beanFactory.addBeanPostProcessor(bean -> System.out.println("解析 @Autowired"));
        beanFactory.addBeanPostProcessor(bean -> System.out.println("解析 @Resource"));
        beanFactory.getBean();
    }
    static class MyBeanFactory {
        public Object getBean() {
            Object bean = new Object();
            System.out.println("构造:" + bean);
            System.out.println("依赖注入:" + bean);
            for (BeanPostProcessor processor : processors) {
                processor.inject(bean);
            }
            System.out.println("初始化:" + bean);
            return bean;
        }
        private List<BeanPostProcessor> processors = new ArrayList<>();
        public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {
            processors.add(beanPostProcessor);
        }
    }
    interface BeanPostProcessor {
        void inject(Object bean);
    }
}