模板方法模式(Template Method):定義一個操做中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟。算法
/** * 抽象類 * Class AbstractClass */ abstract class AbstractClass { /** * 模板方法,定義操做順序,給出邏輯骨架,而邏輯的組成是一些相對應的抽象操做,它們都推遲到子類實現 */ public function templateMethod() { $this->begin(); $this->primitiveOperation1(); $this->primitiveOperation2(); $this->end(); } /** * 抽象行爲,由子類實現 */ abstract public function primitiveOperation1(); /** * 抽象行爲,由子類實現 */ abstract public function primitiveOperation2(); /** * 一些公用邏輯方法 */ public function begin() { echo '開始' . '<br>'; } /** * 一些公用邏輯方法 */ public function end() { echo '結束' . '<br>'; } } /** * 子類 * Class ConcreteClassA */ class ConcreteClassA extends AbstractClass { public function primitiveOperation1() { // TODO: Implement primitiveOperation1() method. echo 'ConcreteClassA類primitiveOperation1方法的具體實現' . '<br>'; } public function primitiveOperation2() { // TODO: Implement primitiveOperation2() method. echo 'ConcreteClassA類primitiveOperation2方法的具體實現' . '<br>'; } } /** * 子類 * Class ConcreteClassB */ class ConcreteClassB extends AbstractClass { public function primitiveOperation1() { // TODO: Implement primitiveOperation1() method. echo 'ConcreteClassB類primitiveOperation1方法的具體實現' . '<br>'; } public function primitiveOperation2() { // TODO: Implement primitiveOperation2() method. echo 'ConcreteClassB類primitiveOperation2方法的具體實現' . '<br>'; } } // 客戶端調用 // ConcreteClassA $concreteClassA = new ConcreteClassA(); $concreteClassA->templateMethod(); // ConcreteClassB $concreteClassB = new ConcreteClassB(); $concreteClassB->templateMethod(); // 結果 開始 ConcreteClassA類primitiveOperation1方法的具體實現 ConcreteClassA類primitiveOperation2方法的具體實現 結束 開始 ConcreteClassB類primitiveOperation1方法的具體實現 ConcreteClassB類primitiveOperation2方法的具體實現 結束