欢迎访问 ==>高老师的博客网页
高焕堂:MISOO(大数据.大思考)联盟.台北中心和东京(日本)分社.总教练
EE EE
成都网站设计、做网站、成都外贸网站建设公司的开发,更需要了解用户,从用户角度来建设网站,获得较好的用户体验。成都创新互联公司多年互联网经验,见的多,沟通容易、能帮助客户提出的运营建议。作为成都一家网络公司,打造的就是网站建设产品直销的概念。选择成都创新互联公司,不只是建站,我们把建站作为产品,不断的更新、完善,让每位来访用户感受到浩方产品的价值服务。
前言:
----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()函数,成为提供给众多子类别来实现的内部接口。我们以来表示之。
如下图所示:
图3、基类实现CI,并定义
由子类来实现内部接口。基于PhoneGap的框架,就可以写HTML5/JS模块来调用Java插件(即上图里的myPlugin子类)。在App执行时,用户会使用WebView画面而触发UI事件,JS就负责处理这些事件。必要时,JS会透过WebView(包含幕后的WebKit引擎)调用到IPlugin通用性接口的函数,转而调用Java插件里的execute()函数。如下图:
图4、CI与两个接口的合作
由于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接口。这项技巧是各种框架开发时,经常使用到的。◆