1.概念
模板模式封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现。
模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。
2.类图
3.示例
https://laravel-china.org/docs/php-design-patterns/2018/TemplateMethod/1517
4.个人理解
模板模式和简单的继承有很大区别,他用final关键字把模板方法做了封装,子类不得修改这个步骤。同时必须实现父类的抽象方法。
不过我们可以添加一些人性化的东西,比如使用钩子wantCondimentsHook() 可以在子类中控制是否需要 “添加作料”,代码如下:
final public function prepareRecipe()
{
$this->boilWater();
$this->brew();
$this->pourInCup();
if($this->wantCondimentsHook())
{
$this->addCondiments();
}else{
echo 'no Condiments';
}
}