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

首頁 > 語言 > PHP > 正文

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

2024-05-05 00:09:42
字體:
來源:轉載
供稿:網友

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

介紹

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

主要角色

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

下面是使用裝飾模式的一個簡單實現:

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()方法僅僅報告方法被調用,并沒有其他功能。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()方法在調用引用的processRequest對象的Process()方法前輸出一條信息。

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

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

執行代碼會得到下面的輸出結果:

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

優點:

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

缺點:

多層裝飾比較負責。

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


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 弥勒县| 慈利县| 华安县| 东阳市| 万山特区| 本溪| 嘉禾县| 泗洪县| 鱼台县| 斗六市| 凉山| 昌都县| 兴海县| 息烽县| 瑞金市| 图片| 吴旗县| 佛山市| 龙陵县| 大城县| 盐边县| 罗甸县| 陇西县| 深水埗区| 赤水市| 富宁县| 千阳县| 秦皇岛市| 甘南县| 永修县| 海兴县| 台湾省| 若尔盖县| 怀远县| 酒泉市| 泰州市| 贡觉县| 汉源县| 綦江县| 广水市| 当阳市|