定義一個(gè)算法結(jié)構(gòu)沛鸵,而將一些步驟延遲到子類實(shí)現(xiàn)磷醋。
典型案例:Spring中的BeanFactory對(duì)BeanPostProcessor的管理涌乳。
默認(rèn)BeanFactory中沒(méi)有任何BeanPostProcessor處理器悉默,但是提供一個(gè)自定義處理器的集合曲梗,集合中存放的是一個(gè)接口類型哮缺;這樣BeanFactory的使用者就可以在使用時(shí)候自定義處理器的邏輯苍蔬。從而到達(dá)功能擴(kuò)展。
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("構(gòu)造:" + 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);
}
}