定義一個操作中演算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變演算法的結構即可重定義該演算法的某些特定步驟。 通俗點的理解就是 :完成一件事情,有固定的數個步驟,但是每個步驟根據對象的不同,而實現細節不同;就可以在父類中定義一個完成該事情的總方法,按照完成事件需要的步驟去調用其每個步驟的 ...
定義一個操作中演算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變演算法的結構即可重定義該演算法的某些特定步驟。
通俗點的理解就是 :完成一件事情,有固定的數個步驟,但是每個步驟根據對象的不同,而實現細節不同;就可以在父類中定義一個完成該事情的總方法,按照完成事件需要的步驟去調用其每個步驟的實現方法。每個步驟的具體實現,由子類完成。
以設計游戲為例,我們先定義游戲的大概框架,然後使各個不同的游戲來繼承這個游戲框架,並實現框架中具體的方法
<?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();