php設(shè)計模式之裝飾模式應(yīng)用案例詳解
本文實例講述了php設(shè)計模式之裝飾模式。分享給大家供大家參考,具體如下:
介紹
- 裝飾者模式(Decorator Pattern)允許你向一個現(xiàn)有的對象添加新的功能,同時又不改變其結(jié)構(gòu)。 這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個包裝。
- 這種模式創(chuàng)建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。
主要角色
- 抽象構(gòu)件(Component)角色:定義一個獨享接口,以規(guī)范準(zhǔn)備接收附加職責(zé)的對象,從而可以給這些對象動態(tài)的添加職責(zé)。
- 具體構(gòu)件(Concrete Component)角色:定義一個將要接收附加職責(zé)的類。
- 裝飾(Decorator)角色:持有一個指向Component對象的指針,并定義一個與Component接口一致的接口。
- 具體裝飾(Concrete Decorator)角色:負責(zé)給構(gòu)件對象增加附加的職責(zé)。
下面是使用裝飾模式的一個簡單實現(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í)行代碼會得到下面的輸出結(jié)果:
Authenticate
Request: authenticating request
StructureRequest: structuring request
LogRequest: logging request
MainProcess: doing something useful with request
優(yōu)點:
裝飾類和被裝飾類可以獨立發(fā)展,不會相互耦合,裝飾模式是繼承的一個代替模式,裝飾模式可以動態(tài)擴展一個實現(xiàn)類的功能。
缺點:
多層裝飾比較負責(zé)。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
- php設(shè)計模式 Adapter(適配器模式)
- PHP設(shè)計模式之適配器模式代碼實例
- php適配器模式介紹
- 學(xué)習(xí)php設(shè)計模式 php實現(xiàn)適配器模式
- PHP設(shè)計模式之適配器模式原理與用法分析
- PHP設(shè)計模式之適配器模式定義與用法詳解
- php設(shè)計模式之工廠模式用法經(jīng)典實例分析
- php設(shè)計模式之單例模式用法經(jīng)典示例分析
- php設(shè)計模式之觀察者模式定義與用法經(jīng)典示例
- php設(shè)計模式之職責(zé)鏈模式定義與用法經(jīng)典示例
- php設(shè)計模式之策略模式應(yīng)用案例詳解
- php設(shè)計模式之適配器模式原理、用法及注意事項詳解
相關(guān)文章
php使用pdo連接報錯Connection failed SQLSTATE的解決方法
這篇文章主要介紹了php使用pdo連接報錯Connection failed SQLSTATE的解決方法,涉及針對配置文件的修改,具有一定的參考借鑒價值,需要的朋友可以參考下2014-12-12PHP echo,print,printf,sprintf函數(shù)之間的區(qū)別與用法詳解
這篇文章主要是對PHP中echo,print,printf,sprintf函數(shù)之間的區(qū)別與用法進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-11-11PHP+Mysql+jQuery實現(xiàn)動態(tài)展示信息
在本文中,我將介紹如何在頁面上實現(xiàn)動態(tài)展示用戶發(fā)表的信息,將用戶發(fā)表的信息逐條播放展示。該效果可以在展示系統(tǒng)動態(tài)、商品評論等場景應(yīng)用2011-10-10PHP set_error_handler()函數(shù)使用詳解(示例)
本文詳細介紹PHP set_error_handler()函數(shù)的使用方法,最后還提供了一個實例2013-11-11