濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > php設(shè)計(jì)模式之裝飾模式應(yīng)用案例詳解

php設(shè)計(jì)模式之裝飾模式應(yīng)用案例詳解

熱門標(biāo)簽:外呼系統(tǒng)能給企業(yè)帶來(lái)哪些好處 百度地圖怎樣標(biāo)注圖標(biāo) 余姚電話機(jī)器人 電銷機(jī)器人問(wèn)門薩維品牌my 開(kāi)發(fā)地圖標(biāo)注類網(wǎng)站 400電話蘭州申請(qǐng)請(qǐng) 百度地圖標(biāo)注偏差 咸寧銷售電銷機(jī)器人系統(tǒng) 廣東廣州在怎么申請(qǐng)400電話

本文實(shí)例講述了php設(shè)計(jì)模式之裝飾模式。分享給大家供大家參考,具體如下:

介紹

  • 裝飾者模式(Decorator Pattern)允許你向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。 這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝。
  • 這種模式創(chuàng)建了一個(gè)裝飾類,用來(lái)包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

主要角色

  • 抽象構(gòu)件(Component)角色:定義一個(gè)獨(dú)享接口,以規(guī)范準(zhǔn)備接收附加職責(zé)的對(duì)象,從而可以給這些對(duì)象動(dòng)態(tài)的添加職責(zé)。
  • 具體構(gòu)件(Concrete Component)角色:定義一個(gè)將要接收附加職責(zé)的類。
  • 裝飾(Decorator)角色:持有一個(gè)指向Component對(duì)象的指針,并定義一個(gè)與Component接口一致的接口。
  • 具體裝飾(Concrete Decorator)角色:負(fù)責(zé)給構(gòu)件對(duì)象增加附加的職責(zé)。

下面是使用裝飾模式的一個(gè)簡(jiǎn)單實(shí)現(xiàn):

class RequestHelper{}
abstract class ProcessRequest{
  abstract function process(RequestHelper $req);
}
class MainProcess extends ProcessRequest{
  function process(RequestHelper $req)
  {
    print __CLASS__.": doing something useful with request\n";
  }
}
abstract class DecorateProcess extends ProcessRequest{
  protected $processRequest;
  function __construct(ProcessRequest $pr)
  {
    $this->processRequest = $pr;
  }
}

和之前一樣,我們定義了一個(gè)抽象基類(ProcessRequest)、一個(gè)具體的組件(MainProcess)和一個(gè)抽象裝飾類(DecorateProcess)。 MainProcess::process()方法僅僅報(bào)告方法被調(diào)用,并沒(méi)有其他功能。DecorateProcess為他的子類保存了一個(gè)ProcessRequest對(duì)象。下面是一些簡(jiǎn)單的具體裝飾類:

class LogRequest extends DecorateProcess{
  function process(RequestHelper $req)
  {
    print __CLASS__.": logging request\n";
    $this->processRequest->process($req);
  }
}
class AuthenticateRequest extends DecorateProcess{
  function process(RequestHelper $req)
  {
    print __CLASS__.": authenticating request\n";
    $this->processRequest->process($req);
  }
}
class StructureRequest extends DecorateProcess{
  function process(RequestHelper $req)
  {
    print __CLASS__.": structuring request\n";
    $this->processRequest->process($req);
  }
}

裝飾類的每一個(gè)process()方法在調(diào)用引用的processRequest對(duì)象的Process()方法前輸出一條信息。

現(xiàn)在我們可以在運(yùn)行時(shí)合并這些類的對(duì)象,創(chuàng)建過(guò)濾器來(lái)對(duì)每一個(gè)請(qǐng)求按不同的順序執(zhí)行不同操作。下面的代碼將所有具體類的對(duì)象組合成為一個(gè)過(guò)濾器:

$process = new AuthenticateRequest(new StructureRequest(
  new LogRequest(
    new MainProcess()
  )));
$process->process(new RequestHelper());

執(zhí)行代碼會(huì)得到下面的輸出結(jié)果:

Authenticate
Request: authenticating request
StructureRequest: structuring request
LogRequest: logging request
MainProcess: doing something useful with request

優(yōu)點(diǎn):

裝飾類和被裝飾類可以獨(dú)立發(fā)展,不會(huì)相互耦合,裝飾模式是繼承的一個(gè)代替模式,裝飾模式可以動(dòng)態(tài)擴(kuò)展一個(gè)實(shí)現(xiàn)類的功能。

缺點(diǎn):

多層裝飾比較負(fù)責(zé)。

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

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

您可能感興趣的文章:
  • php設(shè)計(jì)模式 Adapter(適配器模式)
  • PHP設(shè)計(jì)模式之適配器模式代碼實(shí)例
  • php適配器模式介紹
  • 學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)適配器模式
  • PHP設(shè)計(jì)模式之適配器模式原理與用法分析
  • PHP設(shè)計(jì)模式之適配器模式定義與用法詳解
  • php設(shè)計(jì)模式之工廠模式用法經(jīng)典實(shí)例分析
  • php設(shè)計(jì)模式之單例模式用法經(jīng)典示例分析
  • php設(shè)計(jì)模式之觀察者模式定義與用法經(jīng)典示例
  • php設(shè)計(jì)模式之職責(zé)鏈模式定義與用法經(jīng)典示例
  • php設(shè)計(jì)模式之策略模式應(yīng)用案例詳解
  • php設(shè)計(jì)模式之適配器模式原理、用法及注意事項(xiàng)詳解

標(biāo)簽:巴彥淖爾 鷹潭 重慶 銅陵 衡陽(yáng) 臨沂 十堰 麗江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php設(shè)計(jì)模式之裝飾模式應(yīng)用案例詳解》,本文關(guān)鍵詞  php,設(shè)計(jì)模式,之,裝飾,模式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《php設(shè)計(jì)模式之裝飾模式應(yīng)用案例詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于php設(shè)計(jì)模式之裝飾模式應(yīng)用案例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    庆云县| 舟山市| 乌兰察布市| 尚志市| 监利县| 南宫市| 定安县| 丰顺县| 临汾市| 嘉义县| 柞水县| 滨州市| 益阳市| 三穗县| 永宁县| 会理县| 崇州市| 张掖市| 青冈县| 洪洞县| 毕节市| 喀喇沁旗| 孙吴县| 沐川县| 福清市| 泊头市| 抚远县| 资中县| 磴口县| 布尔津县| 兴化市| 泗水县| 竹北市| 广水市| 梁河县| 宝山区| 丰顺县| 海城市| 新郑市| 新宁县| 卫辉市|