相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
- PHP中opcode緩存簡(jiǎn)單用法分析
- thinkPHP控制器變量在模板中的顯示方法示例
- PHP move_uploaded_file() 函數(shù)(將上傳的文件移動(dòng)到新位置)
- dirname(__FILE__)的含義和應(yīng)用說(shuō)明
- thinkPHP5框架實(shí)現(xiàn)分頁(yè)查詢功能的方法示例
- PHP中單雙號(hào)與變量
- PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法分析
- Laravel ORM對(duì)Model::find方法進(jìn)行緩存示例詳解
- PHP讀寫文件高并發(fā)處理操作實(shí)例詳解
- 【CLI】利用Curl下載文件實(shí)時(shí)進(jìn)度條顯示的實(shí)現(xiàn)
PHP設(shè)計(jì)模式之模板方法模式定義與用法詳解
本文實(shí)例講述了PHP設(shè)計(jì)模式之模板方法模式定義與用法。分享給大家供大家參考,具體如下:
什么是模板方法模式
模板方法(Template Method)設(shè)計(jì)模式中使用了一個(gè)類方法templateMethod(), 該方法是抽象類中的一個(gè)具體方法, 這個(gè)方法的作用是對(duì)抽象方法序列排序,具體實(shí)現(xiàn)留給具體類來(lái)完成.關(guān)鍵在于模板方法模式定義了操作中算法的"骨架",而由具體類來(lái)實(shí)現(xiàn).
什么時(shí)候使用模板方法
如果已經(jīng)明確算法中的一些步驟, 不過(guò)這些步驟可以采用多種不同的方法實(shí)現(xiàn), 就可以使用模板方法調(diào)試.如果算法中的步驟不變, 可以把這些步驟留給子類具體實(shí)現(xiàn).在這種情況下, 可以使用模板方法設(shè)計(jì)模式來(lái)組織抽象類中的基本操作(函數(shù)/方法).然后由子類來(lái)實(shí)現(xiàn)應(yīng)用所需的這些操作.
還有一種用法稍微復(fù)雜一些, 可能需要把子類共同的行為放在一個(gè)類中, 以避免代碼重復(fù).
如果使用多個(gè)類來(lái)解決同一個(gè)大型問(wèn)題, 可能很快就會(huì)出現(xiàn)重復(fù)代碼.
還有一點(diǎn),可以使用模板方法模式控制子類擴(kuò)展,也就是所謂的"鉤子".
示例
在PHP編程中,可能經(jīng)常會(huì)遇到一個(gè)問(wèn)題: 要建立帶圖題的圖像. 這個(gè)算法相當(dāng)簡(jiǎn)單, 就是顯示圖像, 然后的圖像下面顯示文本.
由于模板設(shè)計(jì)中只涉及兩個(gè)參與者, 所以這是最容易理解的模式之一, 同時(shí)也非常有用. 抽象建立templateMethod()
,并由具體類實(shí)現(xiàn)這個(gè)方法.
抽象類
抽象類是這里的關(guān)鍵, 因?yàn)樗瑫r(shí)包含具體和抽象方法. 模板方法往往是具體方法, 其操作是抽象的
兩個(gè)抽象方法分別是addPicture和addTitile,這兩個(gè)操作都包含一個(gè)參數(shù), 分別表示圖像的URL信息和圖像標(biāo)題.
Template.php
<?php abstract class Template { protected $picture; protected $title; public function display($pictureNow, $titleNow) { $this->picture = $pictureNow; $this->title = $titleNow; $this->addPicture($this->picture); $this->addTitle($this->title); } abstract protected function addPicture($picture); abstract protected function addTitle($title); }