歡迎訪問(wèn) ==>高老師的博客網(wǎng)頁(yè)
高煥堂:MISOO(大數(shù)據(jù).大思考)聯(lián)盟.臺(tái)北中心和東京(日本)分社.總教練
EE EE
您好,登錄后才能下訂單哦!
前言:
----IPlugin是PhoneGap框架的通用性接口,通用性接口意味著,眾人可以共享的接口。由于通用性(或共享性),框架開(kāi)發(fā)者可以藉單一的通用性接口來(lái)<包容>形形×××的特殊性接口;具有標(biāo)準(zhǔn)化接口的<減法設(shè)計(jì)>效果,但又不會(huì)減損特性用戶或App對(duì)特殊性接口的需求。兼顧標(biāo)準(zhǔn)性和特殊性的,是框架通用性接口設(shè)計(jì)的重要指標(biāo);這是任何框架開(kāi)發(fā)里,都必須面對(duì)的高度挑戰(zhàn)性任務(wù)之一。
ee ee
歡迎訪問(wèn) ==>高老師的博客網(wǎng)頁(yè)
高煥堂:MISOO(大數(shù)據(jù).大思考)聯(lián)盟.臺(tái)北中心和東京(日本)分社.總教練
EE EE
從PhoneGap的IPlugin接口,學(xué)習(xí)Proxy-Stub設(shè)計(jì)模式
By 高煥堂
1. IPlugin通用性接口
例如,搭配HTML5跨平臺(tái)的PhoneGap框架里,最常用到的是:IPlugin通用性接口;如下圖:
圖1、PhoneGap框架里的IPlugin通用性接口
這種通用性接口,通常會(huì)規(guī)劃一個(gè)抽像基類來(lái)實(shí)現(xiàn)它;而這抽像基類里則定義了抽象函數(shù)。如下圖:
圖2、由Plugin基類來(lái)實(shí)現(xiàn)IPlugin通用性接口
于是,這個(gè)抽象基類擔(dān)任兩項(xiàng)任務(wù):
實(shí)現(xiàn)了IPlugin接口,這是提供給眾多Client來(lái)使用的外部接口。我們以”CI”(Interface for Client)來(lái)表示之。
定義了抽象函數(shù),如上圖里的execute()函數(shù),成為提供給眾多子類別來(lái)實(shí)現(xiàn)的內(nèi)部接口。我們以<I>來(lái)表示之。
如下圖所示:
圖3、基類實(shí)現(xiàn)CI,并定義<I>
由子類來(lái)實(shí)現(xiàn)內(nèi)部接口<I>?;赑honeGap的框架,就可以寫(xiě)HTML5/JS模塊來(lái)調(diào)用Java插件(即上圖里的myPlugin子類)。在App執(zhí)行時(shí),用戶會(huì)使用WebView畫(huà)面而觸發(fā)UI事件,JS就負(fù)責(zé)處理這些事件。必要時(shí),JS會(huì)透過(guò)WebView(包含幕后的WebKit引擎)調(diào)用到IPlugin通用性接口的函數(shù),轉(zhuǎn)而調(diào)用Java插件里的execute()函數(shù)。如下圖:
圖4、CI與<I>兩個(gè)接口的合作
由于IPlugin接口只提供單一函數(shù):execute();使得PhoneGap也只能提供單一函數(shù):exec()。
2. 通用性接口與Proxy-Stub設(shè)計(jì)模式
然而,在HTML5_JS里可能有多個(gè)函數(shù),例如play()和stop()等。于是,在HTML5_JS里,必須從play()函數(shù)轉(zhuǎn)而調(diào)用PhoneGap.exec()函數(shù)。[歡迎光臨 高煥堂 網(wǎng)頁(yè): http://www.cnblogs.com/myEIT/ ]
這個(gè)PhoneGap.exec()再透過(guò)WebView而呼叫到IPlugin.execute()。如果我們?cè)谏鲜黾軜?gòu)里面,加上一個(gè)myProxy類別,它包裝了PhoneGap.exec()函數(shù),扮演Java Plugin的Proxy(代理者)角色,如下圖所示:
圖5、Proxy類將特殊性接口轉(zhuǎn)為通用性接口
此時(shí),HTML5_JS里面就看不到PhoneGap.exec()函數(shù)了,其好處是:
一方面讓HTML5_JS程序代碼比較單純;
另一方面,讓HTML5_JS與PhoneGap.exec()兩者相依性(Dependency)降低,讓HTML5_JS不受制于PhoneGap的框架界面。也因而提升了PhoneGap框架接口的變動(dòng)自由度。
通常,在框架設(shè)計(jì)里,myProxy和myStub會(huì)是成對(duì)的,這稱為Proxy-Stub模式。如下圖所示:
圖6、Stub類則從通用性接口轉(zhuǎn)換到特殊性接口
于此,你已經(jīng)觀摩了如何使用proxy-stub模式來(lái)封裝PhoneGap.exec()界面。除了PhoneGap框架之外,在Android框架里,也使用同樣的技巧來(lái)封裝跨進(jìn)程的IBinder接口。這項(xiàng)技巧是各種框架開(kāi)發(fā)時(shí),經(jīng)常使用到的。◆
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。