定義一個操做中算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類能夠不改變算法的結構便可重定義該算法的某些特定步驟。php
通俗點的理解就是 :完成一件事情,有固定的數個步驟,可是每一個步驟根據對象的不一樣,而實現細節不一樣;就能夠在父類中定義一個完成該事情的總方法,按照完成事件須要的步驟去調用其每一個步驟的實現方法。每一個步驟的具體實現,由子類完成。算法
以設計遊戲爲例,咱們先定義遊戲的大概框架,而後使各個不一樣的遊戲來繼承這個遊戲框架,並實現框架中具體的方法框架
<?php abstract class Game{ abstract function initialize(); abstract function startPlay(); abstract function endPlay(); //定義模板 final public function play(){ //初始化遊戲 $this->initialize(); //開始遊戲 $this->startPlay(); //結束遊戲 $this->endPlay(); } } class HunDouLuo extends Game{ public function initialize(){ echo "HunDouLuo Game Initialized! Start playing.\n"; } public function startPlay(){ echo "HunDouLuo Game Started. Enjoy the game!\n"; } public function endPlay(){ echo "HunDouLuo Game Finished!\n"; } } class TanKe extends Game{ public function initialize(){ echo "TanKe Game Initialized! Start playing.\n"; } public function startPlay(){ echo "TanKe Game Started. Enjoy the game!\n"; } public function endPlay(){ echo "TanKe Game Finished!\n"; } } $hdl = new HunDouLuo(); $hdl->play(); $tk = new TanKe(); $tk->play();