模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
abstract class abstarctclass
{
final void templateMethod()//这就是模板方法,声明为final 以免子类改变算法的顺序
{
operation1();
operation2();
concreateoperation();
}
abstract void operation1();//这两个抽象方法子类必须实现
abstract void operation2();
final void concreateoperation(){}//这个具体的方法定义在抽象类中,声明为final,这样子类无法覆盖它,它可以被模板方法直接使用或者被子类使用
void hook(){}//这是钩子,有子类选择是否覆盖
}
上面的抽象方法子类必须覆盖,那么方法的具体实现跑到了子类那里去了。
对于钩子的用途:
1.让算法与钩子挂钩。
如 钩子:
boolean hook()
{
return true;
}
模板方法:
final void templateMethod()
{
operation1();
operation2()
if(hook())
{
concreateoperation();
}
}
子类可以选择覆盖该方法返回想要的操作,否则就是默认的操作。