国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP模板方法模式使用詳解

2020-03-22 19:01:24
字體:
來源:轉載
供稿:網友
這次給大家帶來PHP模板方法模式使用詳解,PHP模板方法模式使用的注意事項有哪些,下面就是實戰案例,一起來看一下。

什么是模板方法模式

模板方法(Template Method)設計模式中使用了一個類方法templateMethod(), 該方法是抽象類中的一個具體方法, 這個方法的作用是對抽象方法序列排序,具體實現留給具體類來完成.關鍵在于模板方法模式定義了操作中算法的"骨架",而由具體類來實現.

什么時候使用模板方法

如果已經明確算法中的一些步驟, 不過這些步驟可以采用多種不同的方法實現, 就可以使用模板方法調試.如果算法中的步驟不變, 可以把這些步驟留給子類具體實現.在這種情況下, 可以使用模板方法設計模式來組織抽象類中的基本操作(函數/方法).然后由子類來實現應用所需的這些操作.

還有一種用法稍微復雜一些, 可能需要把子類共同的行為放在一個類中, 以避免代碼重復.

如果使用多個類來解決同一個大型問題, 可能很快就會出現重復代碼.

還有一點,可以使用模板方法模式控制子類擴展,也就是所謂的"鉤子".

示例

在PHP編程中,可能經常會遇到一個問題: 要建立帶圖題的圖像. 這個算法相當簡單, 就是顯示圖像, 然后的圖像下面顯示文本.

由于模板設計中只涉及兩個參與者, 所以這是最容易理解的模式之一, 同時也非常有用. 抽象建立templateMethod(),并由具體類實現這個方法.

抽象類

抽象類是這里的關鍵, 因為它同時包含具體和抽象方法. 模板方法往往是具體方法, 其操作是抽象的

兩個抽象方法分別是addPicture和addTitile,這兩個操作都包含一個參數, 分別表示圖像的URL信息和圖像標題.

Template.php

<?phpabstract html' target='_blank'>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);}

具體類

Concrete.php

<?phpinclude_once('Template.php');class Concrete extends Template{  protected function addPicture($picture)  {    $this->picture = 'picture/' . $picture;    echo "圖像路徑為:" . $this->picture . '<br />';  }  protected function addTitle($title)  {    $this->title = $title;    echo "<em>標題: </em>" . $this->title . "<br />";  }}

客戶

Client.php

<?phpfunction autoload($class_name){  include $class_name . '.php';}class Client{  public function construct()  {    $title = "chenqionghe is a handsome boy";    $concrete = new Concrete();    $concrete->display('chenqionghe.png', $title);  }}$worker = new Client();

$concrete變量實例化了Concrete, 但是它調用了display模板方法, 這是從父類繼承的具體操作, 父類通過display()調用子類的操作.

運行后輸出

圖像路徑為:picture/chenqionghe.png
標題: chenqionghe is a handsome boy

可以看到,客戶只需要提供圖像地址和標題

模板方法設計模式中的鉤子

有時模板方法函數可能有一個你不想要的步驟, 某些特定情況下你可能不希望執行這個步驟, 這時候就可以用到模板方法的鉤子.

在模板方法設計模式中, 利用鉤子可以將一個方法作為模板的一部分,不過不一定會用到這個方法, 換句話說, 它是方法的一部分,不過它包含一個鉤子, 可以處理例外情況. 子類可以為算法增加一個可選元素, 這樣一來, 盡管仍按模板方法建立的順序執行, 但有可能并不完成模板方法期望的動作. 對于這種可選的情況, 鉤子就是解決這個問題最理想的工具.

示例

去網購商品, 登場8折, 如果總商品費用超過200元, 就免去12.95元錢運費.

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 砚山县| 浙江省| 平乐县| 潮州市| 上犹县| 石城县| 无棣县| 屏南县| 昭平县| 樟树市| 汶上县| 浪卡子县| 崇州市| 仙桃市| 漠河县| 永德县| 浦江县| 南丰县| 陇南市| 樟树市| 缙云县| 沙湾县| 读书| 化德县| 自治县| 精河县| 芒康县| 车致| 垣曲县| 双峰县| 锡林浩特市| 武安市| 迁安市| 井冈山市| 故城县| 增城市| 志丹县| 双峰县| 古蔺县| 塔城市| 石楼县|