相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
PHP設(shè)計模式之模板方法模式定義與用法詳解
本文實例講述了PHP設(shè)計模式之模板方法模式定義與用法。分享給大家供大家參考,具體如下:
什么是模板方法模式
模板方法(Template Method)設(shè)計模式中使用了一個類方法templateMethod(), 該方法是抽象類中的一個具體方法, 這個方法的作用是對抽象方法序列排序,具體實現(xiàn)留給具體類來完成.關(guān)鍵在于模板方法模式定義了操作中算法的"骨架",而由具體類來實現(xiàn).
什么時候使用模板方法
如果已經(jīng)明確算法中的一些步驟, 不過這些步驟可以采用多種不同的方法實現(xiàn), 就可以使用模板方法調(diào)試.如果算法中的步驟不變, 可以把這些步驟留給子類具體實現(xiàn).在這種情況下, 可以使用模板方法設(shè)計模式來組織抽象類中的基本操作(函數(shù)/方法).然后由子類來實現(xiàn)應(yīng)用所需的這些操作.
還有一種用法稍微復(fù)雜一些, 可能需要把子類共同的行為放在一個類中, 以避免代碼重復(fù).
如果使用多個類來解決同一個大型問題, 可能很快就會出現(xiàn)重復(fù)代碼.
還有一點,可以使用模板方法模式控制子類擴(kuò)展,也就是所謂的"鉤子".
示例
在PHP編程中,可能經(jīng)常會遇到一個問題: 要建立帶圖題的圖像. 這個算法相當(dāng)簡單, 就是顯示圖像, 然后的圖像下面顯示文本.
由于模板設(shè)計中只涉及兩個參與者, 所以這是最容易理解的模式之一, 同時也非常有用. 抽象建立templateMethod()
,并由具體類實現(xiàn)這個方法.
抽象類
抽象類是這里的關(guān)鍵, 因為它同時包含具體和抽象方法. 模板方法往往是具體方法, 其操作是抽象的
兩個抽象方法分別是addPicture和addTitile,這兩個操作都包含一個參數(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); }