模板方法模式:
模板方法模式定义了一个算法的步骤, 并允许子类为一个或多个步骤提供实现。模板方法模式:在一个方法中定义一个
算法的骨架, 而将一些步骤延迟到子类中, 模板方法使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。
<?php
// 模板方法模式
function echoLine($msg) {
echo $msg, '<br/>';
}
abstract class TemplateBase
{
abstract function step1();
abstract function step2();
abstract function step3();
public function doAction() {
$this->step1();
if(!$this->skipStep2()) {
$this->step2();
}
$this->step3();
}
/**
* 钩子方法
*/
public function skipStep2() {
return false;
}
}
class ConcreteTemplate extends TemplateBase
{
public function step1() {
echoLine('This is step 1');
}
public function step2() {
echoLine('This is step 2');
}
public function step3() {
echoLine('This is step 3');
}
// 用来控制是否跳过某些步骤
public function skipStep2() {
return false;
}
}
// test code
$ct = new ConcreteTemplate();
$ct->doAction();