从IPlugin接口学习Proxy-Stub设计模式
admin
2023-02-10 22:00:13
0次

前言:

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

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

ee                                                                        ee

欢迎访问 ==>高老师的博客网页

高焕堂:MISOO(大数据.大思考)联盟.台北中心和东京(日本)分社.总教练


EE                                                                        EE

从PhoneGap的IPlugin接口,学习Proxy-Stub设计模式

By  高焕堂


1. IPlugin通用性接口

例如,搭配HTML5跨平台的PhoneGap框架里,最常用到的是:IPlugin通用性接口;如下图:

从IPlugin接口学习Proxy-Stub设计模式
图1、PhoneGap框架里的IPlugin通用性接口

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

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

 图2、由Plugin基类来实现IPlugin通用性接口

于是,这个抽象基类担任两项任务:

  • 实现了IPlugin接口,这是提供给众多Client来使用的外部接口。我们以”CI”(Interface for Client)来表示之。

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

如下图所示:

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

图3、基类实现CI,并定义

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

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

图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(代理者)角色,如下图所示:

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

 图5、Proxy类将特殊性接口转为通用性接口

此时,HTML5_JS里面就看不到PhoneGap.exec()函数了,其好处是:

一方面让HTML5_JS程序代码比较单纯;

另一方面,让HTML5_JS与PhoneGap.exec()两者相依性(Dependency)降低,让HTML5_JS不受制于PhoneGap的框架界面。也因而提升了PhoneGap框架接口的变动自由度。

    通常,在框架设计里,myProxy和myStub会是成对的,这称为Proxy-Stub模式。如下图所示:

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

 图6、Stub类则从通用性接口转换到特殊性接口

 于此,你已经观摩了如何使用proxy-stub模式来封装PhoneGap.exec()界面。除了PhoneGap框架之外,在Android框架里,也使用同样的技巧来封装跨进程的IBinder接口。这项技巧是各种框架开发时,经常使用到的。◆



相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...