一、
1、需要封装的内容

java sdk封装_js sdk sdk封装思路_外观模式

只封装这些东西,需要对它再进行一层封装吗?其实业务逻辑层包含了许多自己的逻辑,有很多的方法和逻辑是不需要调用者知道的,所以通过API层再对它进行包装给外部而隐藏掉外部不关心的方法或者接口,这样对调用者来说也省去了学习的成本。

 

2、

java sdk封装_js sdk sdk封装思路_外观模式_02

 

3、友盟的外观模式

下图是友盟统计下的各个模块。友盟统计下有很多个子模块,如果每个模块都有一个文档教你如何去使用,且每个模块都有一个类教你去使用每个模块的功能,那接口将会非常多,而且第三方调用起来,学习成本也非常高。而友盟是如何做的呢?它把各个模块都集中到了MobclickAgent这个类中,所以在使用过程中不关心是友盟统计子模块的内容、友盟推送子模块还是友盟分享子模块的内容,统一的入口都是MobclickAgent,只需要调用这个类中的各个方法,而它会根据你调用方法的不同,再去调用各个子模块的内容,这样对开发者来说只需要熟悉MobclickAgent中的各个Api和接口即可。而这就是典型的外观模式的使用。

java sdk封装_js sdk sdk封装思路_java sdk封装_js sdk_03

 

注:这个类主要用到了外观模式,而且外观模式是在封装SDK的过程中一定会用到的一个模式。

 

 

 

4、自己的外观模式

java sdk封装_js sdk sdk封装思路_ide_04

 

三个黄色的矩形模块分别是视频播放模块(customvideoview,完成视频播放的功能)、业务处理模块(完成所有事件的处理以及功能,比如小屏到大屏和大屏到小屏播放)、未来要扩展的其它模块,这些都通过VideoAdContext这个接口来对外暴露对应的功能即可,这样调用者就不需要了解内部有哪些模块,及每个模块是干什么用的,只需要了解VideoAdContext这个外观类对外提供了哪些接口以及每个接口分别是做什么用的。做SDK和做app最大的区别就是SDK要简单、好用,要求封装性要非常地高,这样能降低调用者的耦合性。

5、

java sdk封装_js sdk sdk封装思路_java sdk封装_js sdk_05

 

 

6、

java sdk封装_js sdk sdk封装思路_视频播放_06

 

VideoAdContext 实现了接口VideoAdSlot.AdSDKSlotListener接口,接口回调的典型使用方式。接着就是定义一些成员变量,以及逻辑层VideoAdSlot mAdSlot,而构造方法就是从外部接收要显示的位置以及数据(没有让外部传入json而是传入字符串是因为字符串是基本类型的数据结构,这样通用性更强,外部调用代价更小),然后就可以调用load()调用真正的业务逻辑层。

 

 

updateVideoInScrollView()没有实现任何实际功能,只是调用逻辑层实现功能。所以Api层并不完成任何实际功能,只是对外提供接口,调用逻辑层来完成相应功能。

java sdk封装_js sdk sdk封装思路_java sdk封装_js sdk_07

二、在代码中调用

1、在adapter中创建视频播放模块

java sdk封装_js sdk sdk封装思路_视频播放_08

 

 

2、创建视频播放VideoAdContext,就是Api层

java sdk封装_js sdk sdk封装思路_外观模式_09

 

3、adapter提供updateAdInScrollView()方法,这个方法就是调用api层的方法

java sdk封装_js sdk sdk封装思路_外观模式_10

 

4、在adapter中为listview添加滑动监听的方法,通过onScroll()中调用adapter.updateAdInScrollView()方法最终调用的是自定义的updateAdInScrollView()方法,而updateAdInScrollView()最终调用的是sdk业务逻辑层的updateVideoInScrollView()方法

java sdk封装_js sdk sdk封装思路_视频播放_11