真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php中裝飾模式的應(yīng)用-創(chuàng)新互聯(lián)

這篇文章給大家介紹php中裝飾模式的應(yīng)用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

西湖ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!

介紹


  • 裝飾者模式(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中裝飾模式的應(yīng)用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


當(dāng)前名稱:php中裝飾模式的應(yīng)用-創(chuàng)新互聯(lián)
文章位置:http://weahome.cn/article/cchood.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部