您的位置:首页 > 其它

从IPlugin接口学习Proxy-Stub设计模式 推荐

2014-02-13 07:36 274 查看
前言:
----IPlugin是PhoneGap框架的通用性接口,通用性接口意味着,众人可以共享的接口。由于通用性(或共享性),框架开发者可以藉单一的通用性接口来<包容>形形色色的特殊性接口;具有标准化接口的<减法设计>效果,但又不会减损特性用户或App对特殊性接口的需求。兼顾标准性和特殊性的,是框架通用性接口设计的重要指标;这是任何框架开发里,都必须面对的高度挑战性任务之一。


ee ee欢迎访问 ==>高老师的博客网页高焕堂:MISOO(大数据.大思考)联盟.台北中心和东京(日本)分社.总教练
EE EE从PhoneGap的IPlugin接口,学习Proxy-Stub设计模式
By 高焕堂
1. IPlugin通用性接口
例如,搭配HTML5跨平台的PhoneGap框架里,最常用到的是:IPlugin通用性接口;如下图:


图1、PhoneGap框架里的IPlugin通用性接口 这种通用性接口,通常会规划一个抽像基类来实现它;而这抽像基类里则定义了抽象函数。如下图:

图2、由Plugin基类来实现IPlugin通用性接口于是,这个抽象基类担任两项任务:实现了IPlugin接口,这是提供给众多Client来使用的外部接口。我们以”CI”(Interface for Client)来表示之。

定义了抽象函数,如上图里的execute()函数,成为提供给众多子类别来实现的内部接口。我们以<I>来表示之。

如下图所示:

图3、基类实现CI,并定义<I> 由子类来实现内部接口<I>。基于PhoneGap的框架,就可以写HTML5/JS模块来调用Java插件(即上图里的myPlugin子类)。在App执行时,用户会使用WebView画面而触发UI事件,JS就负责处理这些事件。必要时,JS会透过WebView(包含幕后的WebKit引擎)调用到IPlugin通用性接口的函数,转而调用Java插件里的execute()函数。如下图:

图4、CI与<I>两个接口的合作由于IPlugin接口只提供单一函数:execute();使得PhoneGap也只能提供单一函数:exec()。2. 通用性接口与Proxy-Stub设计模式然而,在HTML5_JS里可能有多个函数,例如play()和stop()等。于是,在HTML5_JS里,必须从play()函数转而调用PhoneGap.exec()函数。[歡迎光臨 高煥堂 網頁: http://www.cnblogs.com/myEIT/ ] 这个PhoneGap.exec()再透过WebView而呼叫到IPlugin.execute()。如果我们在上述架构里面,加上一个myProxy类别,它包装了PhoneGap.exec()函数,扮演Java Plugin的Proxy(代理者)角色,如下图所示:

图5、Proxy类将特殊性接口转为通用性接口 此时,HTML5_JS里面就看不到PhoneGap.exec()函数了,其好处是: 一方面让HTML5_JS程序代码比较单纯; 另一方面,让HTML5_JS与PhoneGap.exec()两者相依性(Dependency)降低,让HTML5_JS不受制于PhoneGap的框架界面。也因而提升了PhoneGap框架接口的变动自由度。 通常,在框架设计里,myProxy和myStub会是成对的,这称为Proxy-Stub模式。如下图所示:

图6、Stub类则从通用性接口转换到特殊性接口 于此,你已经观摩了如何使用proxy-stub模式来封装PhoneGap.exec()界面。除了PhoneGap框架之外,在Android框架里,也使用同样的技巧来封装跨进程的IBinder接口。这项技巧是各种框架开发时,经常使用到的。◆
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  高煥堂 架構設計