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