定义一个算法结构,而将一些步骤延迟到子类实现。
典型案例: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);
}
}