- Spring IOC容器初始化时运用到的模板方法模式
| public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable { |
| |
| void refresh() throws BeansException, IllegalStateException; |
| } |
| |
| public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext, DisposableBean { |
| |
| public void refresh() throws BeansException, IllegalStateException { |
| synchronized (this.startupShutdownMonitor) { |
| |
| |
| protected ConfigurableListableBeanFactory obtainFreshBeanFactory() { |
| refreshBeanFactory(); |
| ConfigurableListableBeanFactory beanFactory = getBeanFactory |
| if (logger.isDebugEnabled()) { |
| logger.debug("Bean factory for " + getDisplayName() + ": " + beanFactory); |
| } |
| |
| public class GenericApplicationContext extends AbstractApplicationContext implements BeanDefinitionRegistry protected final void refreshBeanFactory() throws IllegalStateException { |
| |
| } |
| |
| public final ConfigurableListableBeanFactory getBeanFactory |
| } |
| |
| public abstract class AbstractRefreshableApplicationContext extends AbstractApplicationContext { |
| |
| |
| |
| } |
| 1) 基本思想是:算法只存在于一个地方,也就是在父类中,容易修改。需要修改算法时,只要修改父类的模板方法或者已经实现的某些步骤,子类就会继承这些修改 |
| 2) 实现了最大化代码复用。父类的模板方法和已实现的某些步骤会被子类继承而直接使用 |
| 3) 既统一了算法,也提供了很大的灵活性。父类的模板方法确保了算法的结构保持不变,同时由子类提供部分步骤的实现。 |
| 4) 该模式的不足之处:每一个不同的实现都需要一个子类实现,导致类的个数增加,使得系统更加庞大 |
| 5) 一般模板方法都加上final关键字, 防止子类重写模板方法. |
| 6) 模板方法模式使用场景:当要完成在某个过程,该过程要执行一系列步骤 ,这一系列的步骤基本相同,但其个别步骤在实现时 可能不同,通常考虑用模板方法模式来处理 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2021-08-31 vue开发:前端项目模板