PHP设计模式-模板方法 Template Method

PHP模板方法设计模式 (Template Method) 是一种行为设计模式,指在操作中定义一套算法的骨架/模板,将一些步骤延迟到子类中。模板方法子类重新定义算法的特定步骤之后,不会对主算法的结构造成影响。

它的中心思想是让抽象模板的子类“完成”整个算法。这很类似于PHP框架的库。用户需要实现相关的子类才能使程序进行工作。将子类放在不同的模板中进行重用也可以减少不必要的复制粘帖,也很容易就可以解耦实体类。

// 抽象模板类
abstract class Journey
{
    // 抽象类及其子类提供的公共服务
    // final关键字冻结了本算法的全局行为
    final public function takeATrip()
    {
        $this->buyAFlight();
        $this->takePlane();
        $this->enjoyVacation();
        $this->buyGift();
        $this->takePlane();
    }

    // 抽象模板方法: 模板方法设计模式的关键-子类必须实现该方法
    abstract protected function enjoyVacation();

    // 可选
    protected function buyGift()
    {
    }

    // private 让子类无法知道这个方法
    private function buyAFlight()
    {
        echo "Buying a flight\n";
    }

    // 子类可以访问该方法但不能重写
    final protected function takePlane()
    {
        echo "Taking the plane\n";
    }

    // 作者提示:final 关键字到了最后,知道了哪些方法是不会变的时候,才去加final。刚开始编码时不加。
}
// 城市旅游
class CityJourney extends Journey
{
    protected function enjoyVacation()
    {
        echo "吃喝玩乐\n";
    }
}
// 海边旅游
class BeachJourney extends Journey
{
    protected function enjoyVacation()
    {
        echo "游泳吃海鲜\n";
    }
}
// 调用
$journey = new CityJourney();
$journey->takeATrip();

Leave a Reply

Your email address will not be published. Required fields are marked *