一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php設計模式之裝飾模式應用案例詳解

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

2021-08-04 13:39趙筱蕊 PHP教程

這篇文章主要介紹了php設計模式之裝飾模式,結合具體應用案例形式詳細分析了php裝飾模式的概念、原理、用法及相關操作注意事項,需要的朋友可以參考下

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

介紹

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

主要角色

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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對象。下面是一些簡單的具體裝飾類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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()方法前輸出一條信息。

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

?
1
2
3
4
5
$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程序設計有所幫助。

原文鏈接:https://blog.csdn.net/zhaoxiaoruiR/article/details/88058380

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: tk白丝丨vk | 久99视频精品免费观看福利 | 羞羞影院午夜男女爽爽影院网站 | 91国内在线国内在线播放 | 国产精品九九热 | 色姑娘久| 糖心vlog网页版 | 亚洲欧美日韩中文字幕网址 | 日本免费全黄一级裸片视频 | 护士videossexo另类 | 免费又爽又黄禁片视频在线播放 | 精品国产一区二区 | 精品国产一区二区三区久 | 69堂最新地域网名 | 久久免费资源福利资源站 | 色综合网天天综合色中文男男 | 亚洲欧美日韩国产一区二区精品 | 精品国产91久久久久久久 | 插入逼 | 天美影视文化传媒mv免费 | 亚洲 欧美 偷自乱 图片 | 国产高清在线视频一区二区三区 | www四虎| jj视频免费看 | xxx中国bbbwww| 黄网在线观看免费网站台湾swag | 日韩精品视频观看 | 日韩国产成人精品视频 | 日韩在线视频免费不卡一区 | 亚洲色图2 | 视频一区二区三区在线观看 | 国产成人综合亚洲亚洲欧美 | 国外成品精品1688 | 亚洲国产区| 国产一级在线观看 | 紧身裙女教师波多野结衣 | 日本国产一区二区三区 | 禁忌高h | 扒开放荡老师裙子猛烈的进入 | 91aaa在线观看 | α级毛片 |