亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識(shí)庫 > PHP設(shè)計(jì)模式之模板方法模式定義與用法詳解

PHP設(shè)計(jì)模式之模板方法模式定義與用法詳解

熱門標(biāo)簽:遼寧ai電銷機(jī)器人價(jià)格 寧波外呼營(yíng)銷系統(tǒng) 福建銀行智能外呼系統(tǒng)價(jià)格 房產(chǎn)中介用的是什么外呼系統(tǒng) 上海做外呼線路的通信公司 長(zhǎng)沙做地圖標(biāo)注公司 四川保險(xiǎn)智能外呼系統(tǒng)供應(yīng)商 地圖標(biāo)注專員怎么樣 電話機(jī)器人銷售主要負(fù)責(zé)什么

本文實(shí)例講述了PHP設(shè)計(jì)模式之模板方法模式定義與用法。分享給大家供大家參考,具體如下:

什么是模板方法模式

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

什么時(shí)候使用模板方法

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

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

如果使用多個(gè)類來解決同一個(gè)大型問題, 可能很快就會(huì)出現(xiàn)重復(fù)代碼.

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

示例

在PHP編程中,可能經(jīng)常會(huì)遇到一個(gè)問題: 要建立帶圖題的圖像. 這個(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);
}

具體類

Concrete.php

?php
include_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>標(biāo)題: /em>" . $this->title . "br />";
  }
}

客戶

Client.php

?php
function __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變量實(shí)例化了Concrete, 但是它調(diào)用了display模板方法, 這是從父類繼承的具體操作, 父類通過display()調(diào)用子類的操作.

運(yùn)行后輸出

圖像路徑為:picture/chenqionghe.png
標(biāo)題: chenqionghe is a handsome boy

可以看到,客戶只需要提供圖像地址和標(biāo)題

模板方法設(shè)計(jì)模式中的鉤子

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

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

示例

去網(wǎng)購商品, 登場(chǎng)8折, 如果總商品費(fèi)用超過200元, 就免去12.95元錢運(yùn)費(fèi).

建立鉤子

在模板方法中建立鉤子方法很有意思, 盡管子類可以改變鉤子的行為, 但仍然要遵循模板中定義的順序

IHook.php

?php
abstract class IHook
{
  protected $hook;
  protected $fullCost;
  public function templateMethod($fullCost, $hook)
  {
    $this->fullCost = $fullCost;
    $this->hook = $hook;
    $this->addGoods();
    $this->addShippingHook();
    $this->displayCost();
  }
  protected abstract function addGoods();
  protected abstract function addShippingHook();
  protected abstract function displayCost();
}

這里有3個(gè)抽象方法: addGoods(), addShippingHook(),displayCost(), 抽象類IHook實(shí)現(xiàn)的templateMethod()中確定了它們的順序. 在這里, 鉤子方法放在中間, 實(shí)際上模板方法指定的順序中, 鉤子可以放在任意位置. 模板方法需要兩個(gè)參數(shù), 一個(gè)是總花費(fèi), 另外還需要一個(gè)變量用來確定顧客是否免收運(yùn)費(fèi).

實(shí)現(xiàn)鉤子

一旦抽象類中建立了這些抽象方法, 并指定了它們執(zhí)行的順序, 子類將實(shí)現(xiàn)所有這3個(gè)方法:

Concrete.php

?php
class Concrete extends IHook
{
  protected function addGoods()
  {
    $this->fullCost = $this->fullCost * 0.8;
  }
  protected function addShippingHook()
  {
    if(!$this->hook)
    {
      $this->fullCost += 12.95;
    }
  }
  protected function displayCost()
  {
    echo "您需要支付: " . $this->fullCost . '元br />';
  }
}

addGoods和displayCost都是標(biāo)準(zhǔn)方法, 只有一個(gè)實(shí)現(xiàn)., 不過, addShippingHook的實(shí)現(xiàn)有所不同, 其中有一個(gè)條件來確定是否增加運(yùn)費(fèi). 這就是鉤子.

客戶Client

Client.php

?php
function __autoload($class_name)
{
  include $class_name . '.php';
}
class Client
{
  private $totalCost;
  private $hook;
  public function __construct($goodsTotal)
  {
    $this->totalCost = $goodsTotal;
    $this->hook = $this->totalCost >= 200;
    $concrete = new Concrete();
    $concrete->templateMethod($this->totalCost, $this->hook);
  }
}
$worker = new Client(100);
$worker = new Client(200);

該Client演示了分別購買100塊錢和200塊錢的商品最后的費(fèi)用,運(yùn)行結(jié)果如下

您需要支付: 92.95元
您需要支付: 160元

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP基本語法入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • 學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)模板方法模式
  • PHP設(shè)計(jì)模式之模板模式定義與用法詳解
  • PHP設(shè)計(jì)模式之觀察者模式(Observer)詳細(xì)介紹和代碼實(shí)例
  • php設(shè)計(jì)模式 Template (模板模式)
  • php設(shè)計(jì)模式 DAO(數(shù)據(jù)訪問對(duì)象模式)
  • php設(shè)計(jì)模式 Proxy (代理模式)
  • php單態(tài)設(shè)計(jì)模式(單例模式)實(shí)例
  • php設(shè)計(jì)模式 Singleton(單例模式)
  • php設(shè)計(jì)模式 Facade(外觀模式)
  • php設(shè)計(jì)模式 Strategy(策略模式)
  • PHP設(shè)計(jì)模式之模板方法模式實(shí)例淺析

標(biāo)簽:工商登記 常德 深圳 澳門 宿遷 佛山 延安 宜春

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP設(shè)計(jì)模式之模板方法模式定義與用法詳解》,本文關(guān)鍵詞  PHP,設(shè)計(jì)模式,之,模板,方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP設(shè)計(jì)模式之模板方法模式定義與用法詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP設(shè)計(jì)模式之模板方法模式定義與用法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    久草免费在线观看| 欧美大片a一级毛片视频| 九九九在线视频| 日本伦理黄色大片在线观看网站| 999久久久免费精品国产牛牛| 午夜精品国产自在现线拍| 免费的黄视频| 国产伦久视频免费观看视频| 黄视频网站在线免费观看| 日本免费乱理伦片在线观看2018| 韩国三级香港三级日本三级| 国产激情一区二区三区| 黄视频网站在线看| 欧美一区二区三区在线观看| 国产一区二区精品久久91| 日韩免费在线观看视频| 国产精品1024永久免费视频| 色综合久久手机在线| 精品国产三级a∨在线观看| 黄视频网站在线看| 精品国产亚洲人成在线| 免费一级片在线观看| 欧美a级大片| 日韩在线观看免费| 尤物视频网站在线| 精品国产香蕉在线播出| 国产a视频| 91麻豆tv| 国产亚洲男人的天堂在线观看| 一级女性全黄生活片免费| 亚洲不卡一区二区三区在线 | 国产精品12| a级黄色毛片免费播放视频| 免费国产在线视频| 尤物视频网站在线| 美女免费黄网站| 九九精品久久久久久久久| 欧美激情伊人| 久久精品欧美一区二区| 精品美女| 亚欧视频在线| 国产麻豆精品hdvideoss| 精品视频在线观看一区二区| 青青青草影院| 成人影视在线播放| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美一级视频免费| 精品视频在线观看一区二区| 欧美激情在线精品video| 国产成人精品综合在线| 日韩欧美一及在线播放| 国产麻豆精品高清在线播放| 亚欧成人乱码一区二区| 午夜在线亚洲| 91麻豆国产| 99热精品一区| 黄视频网站在线免费观看| 亚洲第一页乱| 国产一区国产二区国产三区| 久久国产精品自由自在| 国产91精品一区二区| 精品国产一区二区三区免费| 国产麻豆精品免费密入口| 免费一级片网站| 日本在线www| 亚洲精品中文一区不卡| 国产a免费观看| 免费国产在线视频| 成人免费观看的视频黄页| 精品国产三级a| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美一级视| 日本伦理黄色大片在线观看网站| 日本伦理黄色大片在线观看网站| 国产91精品一区二区| 精品视频一区二区三区免费| 精品国产一区二区三区精东影业| 日本特黄特色aa大片免费| 四虎精品在线观看| 青青青草影院 | 日韩中文字幕一区二区不卡| 九九九在线视频| 亚洲精品久久久中文字| 午夜家庭影院| 久久福利影视| 欧美激情一区二区三区在线播放| 国产一级强片在线观看| a级黄色毛片免费播放视频| 国产高清在线精品一区二区 | 久久99青青久久99久久| 国产网站免费在线观看| 精品久久久久久综合网| 国产一区二区精品| 日韩中文字幕在线亚洲一区| 国产91素人搭讪系列天堂| 国产欧美精品| 国产一区二区精品| 成人免费观看男女羞羞视频| 欧美一级视频免费观看| 九九久久99综合一区二区| 久久成人性色生活片| 久久国产影视免费精品| 精品久久久久久免费影院| 国产亚洲精品成人a在线| 国产视频一区二区在线播放| 999精品视频在线| 国产网站麻豆精品视频| 日日日夜夜操| 亚洲天堂在线播放| 久久久久久久免费视频| 中文字幕一区二区三区 精品| 国产激情一区二区三区| 国产一区国产二区国产三区| 日韩一级黄色| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产91精品系列在线观看| 成人高清视频在线观看| 日韩专区一区| 可以免费看毛片的网站| 国产福利免费视频| 国产伦久视频免费观看 视频| 999久久狠狠免费精品| 欧美日本二区| 夜夜操网| 国产极品白嫩美女在线观看看| 可以在线看黄的网站| 久久99爰这里有精品国产| 亚州视频一区二区| 免费国产在线视频| 精品视频在线观看一区二区 | 精品国产亚洲一区二区三区| 美女免费精品高清毛片在线视| 国产高清在线精品一区a| 九九九在线视频| 欧美日本二区| 欧美激情一区二区三区在线播放| 沈樵在线观看福利| 欧美电影免费| 国产不卡精品一区二区三区| 日韩一级黄色| 国产精品1024永久免费视频 | 日日夜夜婷婷| 久草免费资源| 国产网站免费视频| 欧美激情一区二区三区中文字幕| 青青久久精品| 天天色成人| 你懂的福利视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产一区二区精品尤物| 国产a视频| 尤物视频网站在线观看| 99色精品| 九九免费高清在线观看视频| 91麻豆爱豆果冻天美星空| 亚欧成人乱码一区二区| 国产91精品系列在线观看| 国产精品免费久久| 欧美激情一区二区三区视频高清| 日日日夜夜操| 国产不卡高清在线观看视频| 成人a大片在线观看| 精品国产亚洲人成在线| 麻豆午夜视频| 久久国产精品自线拍免费| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 天天色色色| 国产a视频| 欧美国产日韩精品| 欧美国产日韩精品| 成人影院久久久久久影院| 久久精品欧美一区二区| 日韩中文字幕在线播放| 久久国产精品永久免费网站| 青青久久精品| 午夜久久网| 午夜精品国产自在现线拍| 天天做人人爱夜夜爽2020| 超级乱淫黄漫画免费| 四虎影视久久| 二级片在线观看| 午夜欧美福利| 国产视频一区二区在线观看| 国产成a人片在线观看视频| 欧美激情一区二区三区视频 | 国产一区国产二区国产三区| 免费一级片在线观看| 欧美激情一区二区三区视频 | 国产原创视频在线| 国产激情一区二区三区| 成人免费网站视频ww| 91麻豆tv| 人人干人人草| 国产高清在线精品一区二区| 日本在线www| 欧美激情一区二区三区在线| 天天做日日爱夜夜爽| 国产不卡在线看| 精品视频免费在线| 国产91精品一区|