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)文章
php通過asort()給關(guān)聯(lián)數(shù)組按照值排序的方法
這篇文章主要介紹了php通過asort()給關(guān)聯(lián)數(shù)組按照值排序的方法,實例分析了php中asort()函數(shù)的功能與使用技巧,需要的朋友可以參考下2015-03-03PHP中__FILE__、dirname與basename用法實例分析
這篇文章主要介紹了PHP中__FILE__、dirname與basename用法,以實例形式較為詳細的分析了__FILE__、dirname與basename的具體用法,并測試對比了WordPress中自帶的函數(shù),需要的朋友可以參考下2014-12-12深入解析yii權(quán)限分級式訪問控制的實現(xiàn)(非RBAC法)
本篇文章是對yii權(quán)限分級式訪問控制的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下2013-06-06PHP laravel實現(xiàn)導(dǎo)出PDF功能
有時候我們會需要使用PHP導(dǎo)出pdf。這篇文章主要是記錄一下laravel實現(xiàn)導(dǎo)出PDF的兩種方式。文中的示例代碼講解詳細,需要的可以參考一下2022-10-10支持數(shù)組的ADDSLASHES的php函數(shù)
支持數(shù)組的ADDSLASHES2010-02-02