栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式——Template Method(模板方法)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式——Template Method(模板方法)

目录
  • 前言
  • 1 定义
  • 2 适用性
  • 3 结构
    • 3.1 结构图
    • 3.2 参与者
  • 4 Spring应用举例
    • 4.1 AbstractClass——AbstractApplicationContext
    • 4.2 ConcreteClass——GenericWebApplicationContext
  • 5 总结
  • 参考文献

前言

当需要定义一个算法的框架,但是有些步骤,可能需要随着情景发生变化时,如果借助子类可能来封装可能产生大量子类重复代码。而模板方法可以帮助我们抽象公共逻辑,子类实现特定逻辑。

1 定义

Template Method(模板方法):使用抽象的操作定义一个算法,实现其中不变的部分,将经常变化的交给子类去实现。

2 适用性
  • 当你需要扩展一个算法特定部分,不需要改变全部框架结构。
  • 当多个算法大框架类似,只有部分内容根据情景不同,可以抽象使用模板方法。
3 结构 3.1 结构图

模板方法结构图如下:

3.2 参与者
  • AbstractClass:抽象类,负责算法大的框架,实现公共不需要改变的步骤。
  • ConcreteClass:具体子类,负责算法中特定逻辑,从而通过使用抽象类完成一个完整算法。
4 Spring应用举例

模板方法示例较多比如java并发中API层面的锁的支持者:

  • AbstractQueuedSynchronizer大量使用了模板方法。
  • Spring中AbstractApplicationContext中refresh方法也使用了模板方法,留给了子类扩展的地方。

以AbstractApplicationContext为例

4.1 AbstractClass——AbstractApplicationContext

该抽象上下文refresh方法如下:

onRefresh定义如下:

	
	protected void onRefresh() throws BeansException {
		// For subclasses: do nothing by default.
	}
4.2 ConcreteClass——GenericWebApplicationContext

GenericWebApplicationContext中实现具体需要提前进行创建的bean,该方法实现如下:

	
	@Override
	protected void onRefresh() {
		this.themeSource = UiApplicationContextUtils.initThemeSource(this);
	}

该方法就是提前创建主题资源themeSource的bean。

5 总结

当需要将子类重复步骤提到抽象类时可以采用,但是如果模板方法步骤太多可能维护困难,需要考虑。

参考文献

[1]. 《设计模式》
[2]. 模板方法设计方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号