PHP 模板方法模式使用

模板方法模式

用于各个子类均需实现类似的步骤,但是在这些步骤过程中,有各个子类不同的实现方法,也有他们公共的实现方法。

 示例代码:

//====================
//模板方法模式
//====================

/**
 * 抽象类(包含抽象模板)
 * Class Company
 */
abstract class Company{
    //步骤1  抽象方法(各个子类的实现不同)
    public abstract function Step1();

    //步骤2  非抽象方法(各个子类的实现相同,公共方法)
    public function Step2(){
        PrintStr('common step2');
    }

    //步骤3  抽象方法(各个子类的实现不同)
    public abstract function Step3();

    //《模板方法》 非抽象 用于组合上述子类方法,生成一个【模板】,让抽象操作推迟到子类实现!
    public function Active(){
        PrintStr('begin');
        $this->Step1();//实例方法调用方式
        $this->Step2();
        $this->Step3();
        PrintStr('end');
    }
}

/**
 * 子类实现类1
 * Class DHB
 */
class DHB extends Company{
    //实现抽象类中的抽象方法,抽象类中的非抽象方法已经实现。

    public function Step1() {
        PrintStr('DHB Step1');
    }

    public function Step3() {
        PrintStr('DHB Step3');
    }

}

/**
 * 子类实现类2
 * Class ZTE
 */
class ZTE extends Company{
    //实现抽象类中的抽象方法,抽象类中的非抽象方法已经实现。

    public function Step1() {
        PrintStr('ZTE Step1');
    }

    public function Step3() {
        PrintStr('ZTE Step3');
    }
}

function PrintStr($str){
    echo ">>>$str<br>";
}


//Client Call
$obj1=new DHB();
$obj1->Active();
PrintStr('=======');
$obj2=new ZTE();
$obj2->Active();

//Result
//>>>begin
//>>>DHB Step1
//>>>common step2
//>>>DHB Step3
//>>>end
//>>>=======
//>>>begin
//>>>ZTE Step1
//>>>common step2
//>>>ZTE Step3
//>>>end
原文地址:https://www.cnblogs.com/dannywang/p/4369813.html