1.模板方法模式
1)定义:在一个方法中定义好算法的框架,一些具体的算法步骤可以延迟到子类中实现,从而使得在不改变算法结构的情况下,重新定义算法的某些具体步骤。
2)模板方法基本框架
abstract class TempletClass{
//模板方法,在该方法中定义了基本的算法框架
final void algorithmMethod(){
primitiveOp1();
primitiveOp2();
concreteOp3();
hook();
}
//需要子类实现的算法抽象步骤
abstract void primitiveOp1();
abstract void primitiveOp2();
// 不可覆盖的具体方法
final void concreteOp3(){
}
//空的或者默认的可覆盖的具体方法 可以用于对模板方法的算法做一些控制
void hook(){
}
}
3)使用场景:
a:子类必须提供算法中的某个方法或步骤的实现时,使用抽象方法;
b:如果算法的某个步骤是可选的,就使用钩子,模板中的钩子可以为空或者提供默认的实现,子类可根据实际覆盖钩子方法;
4)使用小诀窍
a:合理控制模板中抽象方法的数量,抽象方法不要分的太细,但也不要太少,否则缺少弹性;
b:某些步骤可选时,需由钩子提供控制;
c:注意策略与具体实现分离
5)具体使用示例 java 中 Array sort() 方法,只要数组对象实现了Comparable 接口,就可以排序任何数组对象;
6)类似模式区分
模板方法:父类定义算法模板框架,子类决定如何实现算法中的具 体步骤;
工厂方法:模板方法的一种特殊版本,只要用于剥离对象的实例化,转换到工厂方法中实例化对象;
策略模式:封装算法,使用组合的方式接入