适配器模式一般是在某个栏目下有很多选项,而且业务逻辑比较复杂,这时候,适配器就是一种比较友好的代码设计。
本质上来说,适配器模式是if、else的一种变形,大致形式如下:
Target target = new Adapter(); target.adapt(); /** 其中数据结构 */
Adapter 引用 Adaptee(被适配者)Adapter 是 Target 的实现(或子类)
//在开发印象网盘搜索(impress.pw)的过程中,有需要处理不同栏目的需要,根据不同请求参数生成的不同栏目。本来适配器模式就派送用场了,但是逻辑简单,不需要太复杂的结构,最后基本就用switch语句搞定:
public static Site[] pull(Tab tab) { Site[] sites = null; switch (tab) { case PAGE: sites = SiteConfig.PAGE_SITES; break; case DISK: sites = SiteConfig.DISK_SITES; break; case MOVIE: sites = SiteConfig.MOVIE_SITES; break; case MUSIC: sites = SiteConfig.MUSIC_SITES; break; case MV: sites = SiteConfig.MV_SITES; break; case SHOPPING: sites = SiteConfig.SHOPPING_SITES; break; case BAIKE: sites = SiteConfig.BAIKE_SITES; break; case WENKU: sites = SiteConfig.WENKU_SITES; break; default: sites = SiteConfig.DISK_SITES; break; } return sites; } public static String adapt(String tab, String site) { Site[] sites = pull(tab); for (Site s : sites) { if (s.getSite().equals(site)) return site; } return sites.length == 0 ? null : sites[0].getSite(); }
/** 本来String类型的tab是没法被认识的,但是通过适配一个相关的Tab,这样就可以工作了。*/
这就算是小项目的处理方式(迅速完成,待到增多时,一边写代码一边重构)!
下一文章将介绍在开发印象网盘搜索(impress.pw)过程中,说明一下默认值的处理方式(好代码方式更稳定)。