设计模式-模板方法模式

模板设计模式

定义

模板设计模式就是在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中. 这个方法叫作模板方法. 模板方法使得子类能够在不改变算法结构的状况下, 从新定义算法中的某些步骤.java

对于模板设计模式,最重要的就是要理解模板方法, 模板方法将算法定义成一组步骤, 其中任何步骤均可以是抽象的, 由子类负责实现. 这样可以保证算法结构保持不变, 同时由子类提供部分实现.算法

详细描述

类图以下:设计模式

模板方法设计模式类图

其中templateMethod()就是模板方法, 而在模板方法中会使用primitiveOperation1()和primitiveOperation2()两个方法. 这两个方法会在不一样的子类中有不一样的实现. 具体代码以下:框架

abstract class AbstractClass {
	// 模板方法定义为final, 防止子类进行修改
	final void tempalteMethod() {
		primitiveOperation1();
		primitiveOperation2();
		concreteOperation();
		hook();
	}
}
// 这两个方法定义为抽象的,子类负责具体实现
abstract void primitiveOperation1();
abstract void primitiveOperation2();
// concreateOperation方法定义为final, 防止子类进行修改
final void concreteOperation() {
	// 具体实现
};
// 钩子方法, 能够留空,也能够有默认实现. 子类能够决定是否要进行覆盖.
void hook() {}

抽象类的代码如上, 模板方法中对应的关注点在代码注释中有详细说明. 代码中有hook()方法, 又被称做钩子方法. 钩子方法可以帮助咱们修改模板方法中具体的执行逻辑. 由于hook()方法前面没有加入abstract关键字, 因此子类能够选择不实现.设计

具体实现

模板方法模式在不少框架中都有具体的使用, 好比Spring, JDK源码中的排序等. 这个模式让框架控制如何作事情, 而由使用框架的人来指定框架算法中每一个步骤的细节.code

相关文章
相关标签/搜索