婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

熱門(mén)標(biāo)簽:十堰ai電話機(jī)器人效果怎么樣 臨沂智能電銷機(jī)器人軟件 銀川ai電話機(jī)器人 芒果電銷機(jī)器人 電梯外呼線路板維修視頻 安陽(yáng)自動(dòng)外呼系統(tǒng)價(jià)格是多少 地圖標(biāo)注風(fēng)向標(biāo) 上海公司外呼系統(tǒng)線路 浙江外呼電話系統(tǒng)軟件

委托模式是軟件設(shè)計(jì)模式中的一項(xiàng)基本技巧。在委托模式中,有兩個(gè)對(duì)象參與處理同一個(gè)請(qǐng)求,接受請(qǐng)求的對(duì)象將請(qǐng)求委托給另一個(gè)對(duì)象來(lái)處理。委托模式是一項(xiàng)基本技巧,許多其他的模式,如狀態(tài)模式、策略模式、訪問(wèn)者模式本質(zhì)上是在更特殊的場(chǎng)合采用了委托模式。

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

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

下面是PHP 反射機(jī)制實(shí)現(xiàn)動(dòng)態(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();
// 運(yùn)行結(jié)果
// Generate an Apple
?>

可見(jiàn),通過(guò)代理類FruitDelegator來(lái)代替Fruit類來(lái)實(shí)現(xiàn)他的方法。

同樣的,如下的代碼也是能夠運(yù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)方式下,我們需要判斷當(dāng)前操作是取款操作還是存款操作,在分別調(diào)用Bank類中的取款操作和存款操作。

委托模式:

在委托模式下,我們將不需要客戶端的判斷操作,對(duì)客戶端來(lái)說(shuō),需要什么操作,直接傳入操作類型即可,Bank類可自動(dòng)判斷操作類型,返回相應(yīng)操作的操作結(jié)果。當(dāng)我們的操作類型非常多的時(shí)候,在客戶端用if else判斷無(wú)疑是很可怕的,再假如我們?cè)诤芏嗟胤蕉家羞@塊判斷代碼,我們需要對(duì)這些地方的判斷代碼都進(jìn)行修改(加入后來(lái)添加的判斷),而采用委托模式,我們僅僅需要在新添加的地方添加相應(yīng)需要的類型即可,不需要改動(dòng)其它地方的客戶端代碼(很大程度上提高了代碼的復(fù)用性)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

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

標(biāo)簽:荊門(mén) 武威 遵義 寧夏 遂寧 徐州 常州 吐魯番

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用PHP的反射實(shí)現(xiàn)委托模式的講解》,本文關(guān)鍵詞  用,PHP,的,反射,實(shí)現(xiàn),委托,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用PHP的反射實(shí)現(xiàn)委托模式的講解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于用PHP的反射實(shí)現(xiàn)委托模式的講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 兴和县| 峨山| 密山市| 阿荣旗| 崇礼县| 穆棱市| 东乡族自治县| 石台县| 灵台县| 彩票| 徐闻县| 德格县| 静海县| 云阳县| 商水县| 仙居县| 浦东新区| 阳信县| 栾城县| 邵武市| 庆云县| 九龙坡区| 伊吾县| 周宁县| 长兴县| 东兴市| 潜江市| 祁阳县| 衡山县| 泽普县| 沐川县| 浑源县| 英德市| 浑源县| 五华县| 桑日县| 泰顺县| 密云县| 建瓯市| 五原县| 阳曲县|