日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

《PHP設(shè)計(jì)模式介紹》第十一章 代理模式(4)_PHP教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:《PHP設(shè)計(jì)模式介紹》第十章 規(guī)范模式
在一個(gè)應(yīng)用軟件的成型過程中,一些意想不到的商業(yè)邏輯到處出現(xiàn)。比如,基于價(jià)格的考慮,這個(gè)任務(wù)必須減少項(xiàng)目;而那個(gè)任務(wù)也因?yàn)殇N售稅而必須選擇合適的比率;而其它的任務(wù)也必須因?yàn)槠渌奶貏e

class GlobalWeather {
private function client() {
if (! $this->client instanceof SoapClient) {
$this->client = new SoapClient(
‘http://live。capescience。com/wsdl/GlobalWeather。wsdl’);
}
return $this->client;
}
// 。。。
// ‘boolean isValidCode(string $code)
public function isValidCode($code) {
return $this->client()->isValidCode($code);
}
// and so on for other SOAP service methods 。。。
// ‘WeatherReport getWeatherReport(string $code)
public function getWeatherReport($code) {
return $this->client()->getWeatherReport($code);
}
}

你迷上GlobalWeather服務(wù)的延遲實(shí)例代理類了嗎?你有一個(gè)類可以在任何時(shí)間在你的程序里面創(chuàng)建,并且在不需要它們的時(shí)候就不解析的遠(yuǎn)程資源。使用代理類還有另外一個(gè)優(yōu)勢(shì):使用代理可以列舉SOAP所支持的方法,你現(xiàn)在就可以對(duì)這個(gè)類進(jìn)行測(cè)試。

注:延遲代理可延遲異常

在PHP5里,創(chuàng)建一個(gè)對(duì)象會(huì)產(chǎn)生一個(gè)異常。使用延遲實(shí)例化代理,你可以延遲這個(gè)潛在的異常直到第一次使用方法創(chuàng)建對(duì)象的時(shí)候。。(你可以試試用代理完成這個(gè)功能。)這明顯不是代理模式的重點(diǎn),但是往往有一些事情,你需要記住。

動(dòng)態(tài)代理

PHP5提供一些很好的特性,可以快速的封裝一個(gè)代理類而不用明確的寫出每一個(gè)方法。

class GenericProxy {
protected $subject;
public function __construct($subject) {
$this->subject = $subject;
}
public function __call($method, $args) {
return call_user_func_array(
array($this->subject, $method),
$args);
}
}

這里的關(guān)鍵是_call()方法(通過EXPERIMENTAL擴(kuò)展重載,同樣可用于PHP4)。代理類中的_call方法允許你通過$subject代替的方式來(lái)重定義每個(gè)調(diào)用。由于__call()比其他方法的優(yōu)先級(jí)別都低,你可以在代理類中定義一個(gè)方法,讓__call()來(lái)代替執(zhí)行,于是你可以加一些特別的需求到你使用的代理模式。

總結(jié)

代理模式在很多情況下都非常有用,特別是你想強(qiáng)行控制一個(gè)對(duì)象的時(shí)候,比如:延遲加載,監(jiān)視狀態(tài)變更的方法等等。這章通過開發(fā)GlobalWeather類做示范,以后你也可以使用代理模式在你的本地計(jì)算機(jī)上使用遠(yuǎn)程資源:


動(dòng)態(tài)代理在編寫代碼的時(shí)候非常簡(jiǎn)單,因此可以很快速和容易的實(shí)現(xiàn)在你的程序中。然而(所有的實(shí)現(xiàn)都依賴__call()方法),反射并不能在對(duì)象內(nèi)部具備這樣的可見性(譯注:反射一般是在不了解類的內(nèi)部情況下操作的)。在特殊情況下,如果你使用一個(gè)代理就需要一個(gè)接口,你不能老是依賴于__call()方法,至少必須編碼的時(shí)候,應(yīng)該把接口所有的方法很明確的寫入你的代理類。

分享:《PHP設(shè)計(jì)模式介紹》第九章 觀測(cè)模式
一些面向?qū)ο蟮木幊谭绞�,提供了一種構(gòu)建對(duì)象間復(fù)雜網(wǎng)絡(luò)互連的能力。當(dāng)對(duì)象們連接在一起時(shí),它們就可以相互提供服務(wù)和信息。 通常來(lái)說(shuō),當(dāng)某個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),你仍然需要對(duì)象之間能互

共4頁(yè)上一頁(yè)1234下一頁(yè)
來(lái)源:模板無(wú)憂//所屬分類:PHP教程/更新時(shí)間:2008-08-22
相關(guān)PHP教程