模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤的具体实现推迟到子类中。模板方法模式使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。

以下是一个简单的 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