主頁 > 知識庫 > 用PHP的反射實現(xiàn)委托模式的講解

用PHP的反射實現(xiàn)委托模式的講解

熱門標簽:團購網(wǎng)站 阿里云 科大訊飛語音識別系統(tǒng) 服務器配置 Mysql連接數(shù)設置 Linux服務器 銀行業(yè)務 電子圍欄

委托模式是軟件設計模式中的一項基本技巧。在委托模式中,有兩個對象參與處理同一個請求,接受請求的對象將請求委托給另一個對象來處理。委托模式是一項基本技巧,許多其他的模式,如狀態(tài)模式、策略模式、訪問者模式本質上是在更特殊的場合采用了委托模式。

動態(tài)委托的介紹:動態(tài)委托概念來自于Jakarta 字節(jié)碼工程庫 (Byte-Code Engineering Library, BCEL)。它能夠分析存在的類,并且對于接口,抽象類,甚至運行時的具體類來說,它能夠生成以字節(jié)編碼委托類。

被委托的接口/類應該滿足如下條件:動態(tài)委托最多只能委托一個類,但是能夠代理多個接口。這個限制來自于Java的單繼承模式。一個Java類最多只有一個父類。既然生成的委托類把被委托類作為它的父類,那么指定多個被委托類是不合理的。如果沒有指定被委托類,那么缺省的父類就是Object。

下面是PHP 反射機制實現(xiàn)動態(tài)代理的代碼:

target[] = new Fruit();
 }
 function __call($name, $args) 
 {
 foreach ($this->target as $obj) 
 {
 $r = new ReflectionClass($obj);
 if ($method = $r->getMethod($name)) 
 {
 if ($method->isPublic()  !$method->isAbstract()) 
 {
  return $method->invoke($obj, $args);
 }
 }
 }
 }
}
$obj = new FruitDelegator();
$obj->callFruit();
// 運行結果
// Generate an Apple
?>

可見,通過代理類FruitDelegator來代替Fruit類來實現(xiàn)他的方法。

同樣的,如下的代碼也是能夠運行的:

target[] = $obj;
 }
 function __call($name, $args) 
 {
 foreach ($this->target as $obj) 
 {
 $r = new ReflectionClass($obj);
 if ($method = $r->getMethod($name)) 
 {
 if ($method->isPublic()  !$method->isAbstract()) 
 {
  return $method->invoke($obj, $args);
 }
 }
 }
 }
}
$obj = new ColorDelegator();
$obj->addObject(new Color());
$obj->callColor();
?>

傳統(tǒng)方式:

在傳統(tǒng)方式下,我們需要判斷當前操作是取款操作還是存款操作,在分別調用Bank類中的取款操作和存款操作。

委托模式:

在委托模式下,我們將不需要客戶端的判斷操作,對客戶端來說,需要什么操作,直接傳入操作類型即可,Bank類可自動判斷操作類型,返回相應操作的操作結果。當我們的操作類型非常多的時候,在客戶端用if else判斷無疑是很可怕的,再假如我們在很多地方都要有這塊判斷代碼,我們需要對這些地方的判斷代碼都進行修改(加入后來添加的判斷),而采用委托模式,我們僅僅需要在新添加的地方添加相應需要的類型即可,不需要改動其它地方的客戶端代碼(很大程度上提高了代碼的復用性)。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

您可能感興趣的文章:
  • PHP的反射動態(tài)獲取類方法、屬性、參數(shù)操作示例
  • php面試實現(xiàn)反射注入的詳細方法
  • PHP反射原理與用法深入分析
  • php提供實現(xiàn)反射的方法和實例代碼
  • PHP進階學習之反射基本概念與用法分析
  • php反射學習之不用new方法實例化類操作示例
  • PHP反射學習入門示例
  • PHP反射實際應用示例
  • 淺析PHP類的反射來實現(xiàn)依賴注入過程
  • PHP基于反射機制實現(xiàn)自動依賴注入的方法詳解
  • PHP基于反射獲取一個類中所有的方法
  • PHP反射基礎知識回顧

標簽:衡水 廣元 江蘇 萍鄉(xiāng) 衢州 蚌埠 大理 棗莊

巨人網(wǎng)絡通訊聲明:本文標題《用PHP的反射實現(xiàn)委托模式的講解》,本文關鍵詞  ;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266