PHP設(shè)計模式之模板方法模式實例淺析
本文實例講述了PHP設(shè)計模式之模板方法模式。分享給大家供大家參考,具體如下:
定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
模板方法模式中會用到抽象模板,它的方法分為兩類:
- 基本方法,也叫做基本操作,是由子類實現(xiàn)的方法,并且在模板方法被調(diào)用。
- 模板方法,可以有一個或多個,一般是一個具體方法,也就是一個框架,實現(xiàn)基本方法的調(diào)度,完成固定邏輯。
注意: 為了防止惡意的操作,一般模板方法都加上final關(guān)鍵字,不允許被覆寫。
注意: 抽象模板中的基本方法盡量設(shè)計為protected類型,符合迪米特法則,不需要暴露的屬性或方法盡量不要設(shè)置為protected類型。實現(xiàn)類若非必要,盡量不要擴大父類中的訪問權(quán)限。
模板方法模式的優(yōu)點
- 封裝不變部分,擴展可變部分。
- 提取公共部分代碼,便于維護。
- 行為由父類控制,子類實現(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è)計有所幫助。
相關(guān)文章
將word轉(zhuǎn)化為swf 如同百度文庫般閱讀實現(xiàn)思路及代碼
一般流程想將word轉(zhuǎn)化為pdf格式,再將pdf格式轉(zhuǎn)化為swf格式。在網(wǎng)頁上顯示其實都是swf格式內(nèi)容,具體實現(xiàn)如下,有此需求的朋友可以參考下,希望對大家有所幫助2013-08-08
php 函數(shù)中靜態(tài)變量使用的問題實例分析
這篇文章主要介紹了php 函數(shù)中靜態(tài)變量使用的問題,結(jié)合實例形式分析了php 函數(shù)中靜態(tài)變量使用過程中遇到的問題,以及相關(guān)操作注意事項,需要的朋友可以參考下2020-03-03
PHP回調(diào)函數(shù)與匿名函數(shù)實例詳解
這篇文章主要介紹了PHP回調(diào)函數(shù)與匿名函數(shù),結(jié)合實例形式分析了php回調(diào)函數(shù)與匿名函數(shù)的具體功能、用法及相關(guān)注意事項,需要的朋友可以參考下2017-08-08
PHP函數(shù)之error_reporting(E_ALL ^ E_NOTICE)詳細說明
在看帝國cms的connect.php是發(fā)現(xiàn)第一句是error_reporting(E_ALL ^ E_NOTICE);以前也沒注意過這個語句,知道是設(shè)置錯誤提示的,但不清楚具體怎樣設(shè)置使用。下面從網(wǎng)上摘抄了些東西,總結(jié)了一下。2011-07-07
php面向?qū)ο笾衧tatic靜態(tài)屬性和靜態(tài)方法的調(diào)用
這篇文章主要介紹了php面向?qū)ο笾衧tatic靜態(tài)屬性和靜態(tài)方法的調(diào)用,實例分析了static靜態(tài)屬性和靜態(tài)方法的原理與調(diào)用技巧,需要的朋友可以參考下2015-02-02
PHP改進計算字符串相似度的函數(shù)similar_text()、levenshtein()
PHP 原生的similar_text()函數(shù)、levenshtein()函數(shù)對中文漢字支持不好,我自己寫了一個,測試使用正常,推薦給大家,如果有什么問題,請留言2014-10-10

