本文實例講述了PHP設計模式之模板方法模式。分享給大家供大家參考,具體如下:
定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
模板方法模式中會用到抽象模板,它的方法分為兩類:
- 基本方法,也叫做基本操作,是由子類實現的方法,并且在模板方法被調用。
- 模板方法,可以有一個或多個,一般是一個具體方法,也就是一個框架,實現基本方法的調度,完成固定邏輯。
注意: 為了防止惡意的操作,一般模板方法都加上final關鍵字,不允許被覆寫。
注意: 抽象模板中的基本方法盡量設計為protected類型,符合迪米特法則,不需要暴露的屬性或方法盡量不要設置為protected類型。實現類若非必要,盡量不要擴大父類中的訪問權限。
模板方法模式的優(yōu)點
- 封裝不變部分,擴展可變部分。
- 提取公共部分代碼,便于維護。
- 行為由父類控制,子類實現
示例:
?php
/**
* 模型方法模式
*/
abstract class ACar {
abstract protected function start();
abstract protected function engineBoom();
abstract protected function alarm();
abstract protected function stop();
public function run() {
$this->start();
$this->engineBoom();
$this->alarm();
$this->stop();
}
}
final class Benz extends ACar {
protected function start() {
echo 'Benz start' . PHP_EOL;
}
protected function engineBoom() {
echo 'Benz engine boom' . PHP_EOL;
}
protected function alarm() {
echo 'Benz alarm' . PHP_EOL;
}
protected function stop() {
echo 'Benz stop' . PHP_EOL;
}
}
final class BMW extends ACar {
protected function start() {
echo 'BMW start' . PHP_EOL;
}
protected function engineBoom() {
echo 'BMW engine boom' . PHP_EOL;
}
protected function alarm() {
echo 'BMW alarm' . PHP_EOL;
}
protected function stop() {
echo 'BMW stop' . PHP_EOL;
}
// 修改順序
public function run() {
$this->start();
$this->alarm();
$this->engineBoom();
$this->stop();
}
}
class Client {
public static function run() {
$benz = new Benz();
$benz->run();
$bmw = new BMW();
$bmw->run();
}
}
Client::run();
運行結果:
Benz start Benz engine boom Benz alarm Benz stop BMW start BMW alarm BMW engine boom BMW stop
注:部分內容摘自《設計模式之禪》
更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
您可能感興趣的文章:- php單態(tài)設計模式(單例模式)實例
- php設計模式 Singleton(單例模式)
- 基于php設計模式中單例模式的應用分析
- 學習php設計模式 php實現單例模式(singleton)
- PHP設計模式之單例模式原理與實現方法分析
- PHP設計模式之抽象工廠模式實例分析
- PHP設計模式之簡單工廠和工廠模式實例分析
- PHP設計模式之工廠模式定義與用法詳解
- PHP設計模式之單例模式定義與用法分析