Chinaunix首页 | 论坛 | 博客
  • 博客访问: 817630
  • 博文数量: 62
  • 博客积分: 526
  • 博客等级: 二等列兵
  • 技术积分: 2078
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-04 20:41
个人简介

博客迁移至 freefe.cc

文章分类

全部博文(62)

分类: JavaScript

2014-05-13 19:51:03

    
    适配器模式在维基百科上的属于 Wrapper function 包装函式,其目的是用来呼叫另一个函式。在面向对象编程中,又被称为方法委任,method delegation。而适配器模式可以说是包装函式其中一种功能形式的存在。


    简单的说,适配模式主要是为了解决一些接口不兼容产生的解决方法。借助于适配器我们可以在不修改这些不兼容接口的情况下给使用者提供统一的包装过的适配接口。表面上又感觉和之前的门面模式比较像,均是对其他对象或者接口进行包装再呈现,而适配器模式偏向的是解决兼容性问题,门面模式则偏向方便性为原则。

    比如一个简单的学生查询学科成绩的方法:
   
  1. function selectScore( name, id, course_id ){
  2.     // arguments 姓名 学号 课程id
  3.     ...
  4. }

    当我需要一个班级某门学科的整体成绩列表,而我手上只有每个学生如下的数据

  1. [
  2.     { name: 'lily', studentID: '0911' },
  3.     { name: 'suny', studentID: '0912' },
  4.     ...
  5. ]

    我需要查询 英语 其课程ID为  101,那么对于该任务,写一个适配器方式是很恰当不过的
    
  1. function selectEnglishScore( stutentObj ){
  2.     selectScore( stutentObj.name, stutentObj.studentID , 101);
  3. }

    这是一个最简单的关于适配器来处理参数方面兼容的形式。

    适配器模式可以想象为我们日常生活中经常使用的接口转换器,实现两个或者多个不同的数据存储器进行数据交换,适配各自不同数据输出口的工具,比如以前的一些PS2插口, USB接口,以及当前SD卡,移动硬盘各式各样的接口,接**换器是一件灰常有用的小工具。适配器模式的方法也是如此。

    其实简单的来说,适配器模式意义上很简单 - 适配,解决兼容问题。对于应用场景来说,主要是为了解决新旧代码之间不想重构而实行的中庸的方式,或者更换一些类库,升级不兼容版本类库的时候的一种“懒惰”方法。对于适配器模式的确会造成一些不同的看法,比如说原本是需要完全重构的代码却使用了几个简单的适配器模式方法就搪塞过去了。随着这些行为的越来越过,使得代码的质量日渐不足,甚至令后来的程序猿感到愤愤不已。

    所以对于适配器模式使用的情况我们需要做好多方面的考虑,其实对于所谓的程序设计模式而言均是如此。原本是为了优化而做的工作,可别到头来适得其反。



阅读(5532) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~