模板方法模式定义一个操作中的算法骨架,将一些步骤延迟到子类中。使子类可以不改变算法结构的情况下即可重定义算法的某些特定步骤。

模板方法模式主要是提供一个代码复用的平台。把不变的东西提取到超类中,以去除子类重复的代码。

模板方法实现:

abstract class AbstractClass {

public abstract function Operator1();

public abstract function Operator2();

public function templateMethod()
{
    $this->Operator1();
    $this->Operator2();
    echo '算法实现.'.'<br>';
}
}


class ConcreteA extends AbstractClass {

public function Operator1(){
    echo '算法A实现1'.'<br>';
}

public function Operator2()
{
    echo '算法A实现b'.'<br>';
}
}


class ConcreteB extends AbstractClass {

public function Operator1(){
    echo '算法B实现1'.'<br>';
}

public function Operator2()
{
    echo '算法B实现b'.'<br>';
}
}

客户端代码:

$a = new ConcreteA();
$a->templateMethod();

$b = new ConcreteB();
$b->templateMethod();

结果:

算法A实现1
算法A实现b
算法实现.
算法B实现1
算法B实现b
算法实现.