什么是模板方法
举个简单的例子,人的一生,出生,成长,死亡。
人都是按照这个步骤一步一步的走下去,无一例外。但是每个人都有自己的活法。
其中人的一生(出生、成长、死亡)就是一个模板。而每人的活法就是具体实现。
何时使用模板方法
算法中的每个步骤是确定的,但是每个步骤的具体实现方式是可以灵活多变的。
怎么使用
模板方法的实现方式特别简单。一个抽象类,和一个具体类就能搞定。
抽象类规定了算法的骨架。具体类负责具体过程的实现。
并且可以再其中一些位置插入 钩子
。
以下代码中的 beforeAction
和 endAction
就是 钩子
的示例。
// 模板方法设计模式
abstract class TemplateMethod
{
public function operationList()
{
echo static::beforeAction();
echo $this->getText();
echo $this->getImg();
echo static::endAction();
}
abstract protected function getText();
abstract protected function getImg();
protected function beforeAction()
{
echo 'before action'.PHP_EOL;
}
protected function endAction()
{
echo 'end action'.PHP_EOL;
}
}
class Concrete extends TemplateMethod
{
function beforeAction()
{
echo 'concrete before action'.PHP_EOL;
}
protected function getText()
{
return 'text'.PHP_EOL;
}
protected function getImg()
{
return 'img'.PHP_EOL;
}
}
$c = new Concrete();
$c->operationList();
output:
concrete before action
text
img
end action
网友评论