模板方法模式
用于各个子类均需实现类似的步骤,但是在这些步骤过程中,有各个子类不同的实现方法,也有他们公共的实现方法。
示例代码:
//==================== //模板方法模式 //==================== /** * 抽象类(包含抽象模板) * 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