最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php設計模式之裝飾模式應用案例詳解

 更新時間:2019年06月17日 11:34:52   作者:趙筱蕊  
這篇文章主要介紹了php設計模式之裝飾模式,結合具體應用案例形式詳細分析了php裝飾模式的概念、原理、用法及相關操作注意事項,需要的朋友可以參考下

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

介紹

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

主要角色

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

下面是使用裝飾模式的一個簡單實現(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;
  }
}

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

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);
  }
}

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

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

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

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

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

優(yōu)點:

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

缺點:

多層裝飾比較負責。

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

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

相關文章

  • 刪除html標簽得到純文本可處理嵌套的標簽

    刪除html標簽得到純文本可處理嵌套的標簽

    這篇文章主要介紹了通過刪除html標簽得到的純文本可處理嵌套的標簽,需要的朋友可以參考下
    2014-04-04
  • php中switch與ifelse的效率區(qū)別及適用情況分析

    php中switch與ifelse的效率區(qū)別及適用情況分析

    這篇文章主要介紹了php中switch與ifelse的效率區(qū)別及適用情況分析,以實例的形式分析了針對變量與常量的情況下switch與ifelse的效率區(qū)別,非常具有實用價值,需要的朋友可以參考下
    2015-02-02
  • PHP內(nèi)置過濾器FILTER使用實例

    PHP內(nèi)置過濾器FILTER使用實例

    這篇文章主要介紹了PHP內(nèi)置過濾器FILTER使用實例,列舉了驗證功能和糾錯功能的代碼例子來講解如何使用FILTER,需要的朋友可以參考下
    2014-06-06
  • PHP實現(xiàn)C#山寨ArrayList的方法

    PHP實現(xiàn)C#山寨ArrayList的方法

    這篇文章主要介紹了PHP實現(xiàn)C#山寨ArrayList的方法,通過一個php自定義類模擬實現(xiàn)C#中ArrayList的功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • PHP直接修改表內(nèi)容DataGrid功能實現(xiàn)代碼

    PHP直接修改表內(nèi)容DataGrid功能實現(xiàn)代碼

    最近想做一個通過PHP實現(xiàn)DataGrid功能的東西,這樣可以直接修改數(shù)據(jù)庫中表的內(nèi)容,而不用開發(fā)【新增數(shù)據(jù)頁面】和【編輯頁面】,本篇首先介紹基于MySQL的使用方法,再簡單介紹對于Oracle連接(基于sqlrelay)的二次開發(fā)。
    2015-09-09
  • 深入php var_dump()函數(shù)的詳解

    深入php var_dump()函數(shù)的詳解

    本篇文章是對php var_dump()函數(shù)進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP中經(jīng)緯度坐標相關計算方法小結

    PHP中經(jīng)緯度坐標相關計算方法小結

    這篇文章主要為大家詳細介紹了PHP中經(jīng)緯度坐標相關計算方法的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-04-04
  • php命名空間學習詳解

    php命名空間學習詳解

    這篇文章主要介紹了php命名空間的相關問題和技巧,需要的朋友可以參考下
    2014-02-02
  • Laravel中正確地返回HTTP狀態(tài)碼方法示例

    Laravel中正確地返回HTTP狀態(tài)碼方法示例

    這篇文章主要給大家介紹了如何在Laravel中正確地返回HTTP狀態(tài)碼的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Laravel具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • php+ajax登錄跳轉登錄實現(xiàn)思路

    php+ajax登錄跳轉登錄實現(xiàn)思路

    這篇文章主要介紹了php+ajax登錄跳轉登錄實現(xiàn)思路,非常的簡單,有需要的小伙伴可以參考下
    2016-07-07

最新評論

大余县| 瓦房店市| 临邑县| 富阳市| 启东市| 大连市| 大化| 项城市| 灌南县| 张家川| 湛江市| 武冈市| 绿春县| 都兰县| 武川县| 双江| 合山市| 南江县| 自治县| 中卫市| 岳阳县| 巴彦淖尔市| 云安县| 静宁县| 武宣县| 伊通| 道孚县| 广德县| 寻甸| 浠水县| 扎兰屯市| 蓬安县| 乌拉特后旗| 临安市| 太和县| 九寨沟县| 宁乡县| 临漳县| 东平县| 社会| 利津县|