以下是一个简单的 PHP 模板方法模式的示例:
<?php
// 模板抽象类
abstract class AbstractClass {
// 模板方法定义了算法的骨架
public function templateMethod() {
$this->step1();
$this->step2();
$this->step3();
}
// 抽象步骤1
abstract protected function step1();
// 具体步骤2
protected function step2() {
echo "Default implementation of Step 2\n";
}
// 具体步骤3
protected function step3() {
echo "Default implementation of Step 3\n";
}
}
// 具体类1
class ConcreteClass1 extends AbstractClass {
protected function step1() {
echo "Implementation of Step 1 for ConcreteClass1\n";
}
protected function step3() {
echo "Implementation of Step 3 for ConcreteClass1\n";
}
}
// 具体类2
class ConcreteClass2 extends AbstractClass {
protected function step1() {
echo "Implementation of Step 1 for ConcreteClass2\n";
}
protected function step2() {
echo "Implementation of Step 2 for ConcreteClass2\n";
}
}
// 客户端代码
$object1 = new ConcreteClass1();
$object1->templateMethod();
$object2 = new ConcreteClass2();
$object2->templateMethod();
在这个例子中,AbstractClass 是模板抽象类,定义了一个模板方法 templateMethod,该方法定义了算法的骨架,包含了三个步骤 step1、step2 和 step3。其中,step1 是抽象方法,需要在子类中具体实现,而 step2 和 step3 是具体方法,有默认的实现,子类可以选择重写。
ConcreteClass1 和 ConcreteClass2 是具体子类,分别实现了模板抽象类的抽象步骤和重写了具体步骤。
客户端代码创建了两个具体子类对象,并调用它们的模板方法,从而执行算法的骨架。
模板方法模式有助于将算法的不变部分和变化部分分离,提高了代码的复用性和扩展性。在模板方法模式中,子类可以重新定义算法中的某些步骤,而不会改变算法的整体结构。
转载请注明出处:http://www.pingtaimeng.com/article/detail/11963/PHP