婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP設計模式之模板方法模式定義與用法詳解

PHP設計模式之模板方法模式定義與用法詳解

熱門標簽:遼寧ai電銷機器人價格 寧波外呼營銷系統 福建銀行智能外呼系統價格 房產中介用的是什么外呼系統 上海做外呼線路的通信公司 長沙做地圖標注公司 四川保險智能外呼系統供應商 地圖標注專員怎么樣 電話機器人銷售主要負責什么

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

什么是模板方法模式

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

什么時候使用模板方法

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

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

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

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

示例

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

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

抽象類

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

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

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>標題: /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變量實例化了Concrete, 但是它調用了display模板方法, 這是從父類繼承的具體操作, 父類通過display()調用子類的操作.

運行后輸出

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

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

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

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

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

示例

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

建立鉤子

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

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個抽象方法: addGoods(), addShippingHook(),displayCost(), 抽象類IHook實現的templateMethod()中確定了它們的順序. 在這里, 鉤子方法放在中間, 實際上模板方法指定的順序中, 鉤子可以放在任意位置. 模板方法需要兩個參數, 一個是總花費, 另外還需要一個變量用來確定顧客是否免收運費.

實現鉤子

一旦抽象類中建立了這些抽象方法, 并指定了它們執行的順序, 子類將實現所有這3個方法:

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都是標準方法, 只有一個實現., 不過, addShippingHook的實現有所不同, 其中有一個條件來確定是否增加運費. 這就是鉤子.

客戶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塊錢的商品最后的費用,運行結果如下

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

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP基本語法入門教程》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

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

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

巨人網絡通訊聲明:本文標題《PHP設計模式之模板方法模式定義與用法詳解》,本文關鍵詞  PHP,設計模式,之,模板,方法,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP設計模式之模板方法模式定義與用法詳解》相關的同類信息!
  • 本頁收集關于PHP設計模式之模板方法模式定義與用法詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩精品一区国产麻豆| 色综合久久久久久久久久久| 国产成人精品亚洲777人妖| 欧美日韩黄色影视| 日韩国产欧美在线视频| 欧美人狂配大交3d怪物一区| 三级成人在线视频| 精品国产自在久精品国产| 精品亚洲成a人在线观看| 国产亚洲一区二区三区四区| av在线一区二区| 午夜久久久久久久久| 日韩一区二区三区视频| 国产美女在线精品| 成人免费视频在线观看| 欧美精品久久99久久在免费线| 美女国产一区二区| 国产精品免费aⅴ片在线观看| 色琪琪一区二区三区亚洲区| 美女视频一区在线观看| 国产欧美在线观看一区| 欧美视频在线不卡| 国产一区二区伦理片| 亚洲男人电影天堂| 精品日韩av一区二区| 9l国产精品久久久久麻豆| 一二三四区精品视频| 精品成人在线观看| 色系网站成人免费| 国产精品综合网| 亚洲一区在线观看免费 | 国产成人av网站| 欧美日韩三级在线| 成人av在线影院| 日本乱人伦一区| 欧美日韩高清一区| 精品女同一区二区| 国产精品全国免费观看高清| 亚洲精品自拍动漫在线| 日本美女视频一区二区| 国产剧情一区二区| 在线观看日韩国产| 26uuu久久综合| 一区在线观看免费| 午夜a成v人精品| 国内精品在线播放| 午夜精品福利一区二区三区av| 欧美日韩美少妇| 欧美综合天天夜夜久久| 99精品久久99久久久久| 国产精品123| 国产美女在线观看一区| 免费成人av在线| 香蕉久久一区二区不卡无毒影院 | 久99久精品视频免费观看| 亚洲一区二区成人在线观看| 亚洲日本成人在线观看| 中文字幕精品综合| 国产精品色一区二区三区| 久久久久久99精品| 国产日产欧产精品推荐色| 久久天天做天天爱综合色| 久久综合九色综合欧美就去吻 | 制服丝袜av成人在线看| 色综合久久88色综合天天免费| 成人一区二区三区| 国产不卡视频在线播放| 大胆欧美人体老妇| 91性感美女视频| 欧美色国产精品| 91精品国产免费| 91精品久久久久久久99蜜桃| 欧美一区二区免费| 精品播放一区二区| 国产精品嫩草影院com| 亚洲精选在线视频| 日韩精品欧美精品| 韩国av一区二区三区在线观看| 2欧美一区二区三区在线观看视频| 国产欧美日韩在线看| 另类综合日韩欧美亚洲| 91精品久久久久久蜜臀| 亚洲一区二区三区视频在线播放| 成人妖精视频yjsp地址| 国产日韩av一区二区| 韩国一区二区视频| 精品国产露脸精彩对白| 日韩一区欧美二区| 欧美色视频在线| 亚洲精品中文在线影院| 99久久免费视频.com| 欧美国产日韩在线观看| 久久久久国产成人精品亚洲午夜| 欧美一区二区三区在| 国产欧美日产一区| 亚洲欧美日韩一区二区三区在线观看 | 久久超碰97人人做人人爱| 国产精品羞羞答答xxdd| 9i在线看片成人免费| 人人超碰91尤物精品国产| 国产成人亚洲综合色影视| 久久久久久久久99精品| 国产不卡视频在线观看| 国产精品网曝门| eeuss影院一区二区三区| 国产色爱av资源综合区| 成人福利在线看| 国产精品国产三级国产aⅴ无密码| 成人高清视频在线| 最新久久zyz资源站| 国产精品久久久久影视| 97精品久久久午夜一区二区三区| 国产精品久久久久天堂| 成人av电影在线播放| 亚洲天堂免费在线观看视频| 欧美中文字幕一区二区三区亚洲| 天涯成人国产亚洲精品一区av| 欧美乱妇15p| 国产米奇在线777精品观看| 国产欧美精品在线观看| 成人免费高清视频在线观看| 亚洲欧美日韩国产手机在线| 欧美性淫爽ww久久久久无| 青青国产91久久久久久| 久久久夜色精品亚洲| 成人黄色电影在线| 一区二区在线看| 日韩亚洲欧美综合| 成人毛片老司机大片| 亚洲大尺度视频在线观看| 欧美一级片在线看| 日本在线观看不卡视频| 欧美激情一区二区三区蜜桃视频| 色婷婷av一区二区三区gif| 亚洲成av人片在www色猫咪| 久久亚洲一区二区三区四区| 99国产麻豆精品| 日韩精品亚洲专区| 亚洲欧美视频在线观看视频| 日韩欧美国产综合| 日本黄色一区二区| 九九国产精品视频| 亚洲1区2区3区视频| 中文字幕欧美日本乱码一线二线| 欧美制服丝袜第一页| 精品一区二区三区不卡| 精品在线一区二区三区| 亚洲国产精品视频| 亚洲国产激情av| 26uuu另类欧美| 欧美精品vⅰdeose4hd| 色八戒一区二区三区| 国产精品一品二品| 蜜桃av一区二区在线观看| 亚洲男人都懂的| 国产精品女同互慰在线看| 伊人婷婷欧美激情| 日韩一区在线播放| 国产色91在线| 久久伊人中文字幕| 7777精品伊人久久久大香线蕉最新版| av不卡免费在线观看| 国产精品卡一卡二卡三| 久久亚洲综合色一区二区三区| 欧美精品三级日韩久久| 91国偷自产一区二区开放时间 | 色香蕉久久蜜桃| www.欧美日韩| 丁香婷婷综合网| 国产精品一区二区三区乱码| 久久色中文字幕| 久久精品在这里| 久久综合给合久久狠狠狠97色69| 91精品国产欧美一区二区18| 欧美日韩亚洲综合| 欧美日韩视频在线观看一区二区三区| 一本大道av伊人久久综合| 99久久精品免费看| 91首页免费视频| 亚洲高清视频的网址| 亚洲成a人在线观看| 午夜欧美一区二区三区在线播放 | 国产一区二区视频在线播放| 日本不卡一二三| 麻豆久久久久久| 韩国精品一区二区| 国产精品性做久久久久久| 国产精品一区二区免费不卡| 国产精品一区二区三区99| 国产99精品视频| 色综合久久精品| 欧美丰满一区二区免费视频| 日韩女同互慰一区二区| www国产精品av| www.99精品| 色狠狠桃花综合| 欧美丰满一区二区免费视频| 精品视频一区二区三区免费| 欧美变态口味重另类| 亚洲国产精品v|