0.前言

脖子又开始痛了,难道还没成为码农就开始出现颈椎问题,一直以来举得自己不算那种死宅的人,怎么这么年轻就出现这种问题。哎,不管了,还是先把自己学习的适配器模式写出来,算是一种总结吧。

1.为什么存在该模式

在项目的实际开发过程中,期待的接口与现有的接口之间存在不兼容问题,但是又不规模修改代码,为了达到兼容性,就需要使用这种模式。通过这种接口使得原来由于接口不兼容而不能一起工作的那些类可以一起工作,也就是用一个新的的接口包装另外一个对象。

与门面模式的区别:都是对别的对象进行包装并改变呈现接口,但是二者的区别在不如何改变接口。门面模式展现的是一个简化的接口,并不提供额外的选择,而适配器模式则要把一个接口转换为另一个接口,它并不会滤除某些能力,也不会简化接口。

适配器的工作机制是:用一个新的接口对现有类的接口进行包装。

2.举例说明:

//假如有一个3个字符串参数的函数,但是现在拥有的却是一个包含三个字符串元素的对象,那么就可以用一个配置器来衔接二者
  var clientObject = {
  str1:'bat',
  str2:'foo',
  str3:'baz'
  }
  function interfaceMethod(str1,str2,str3){
    alert(str1)
  }
  //配置器函数
  function adapterMethod(o){
  interfaceMethod(o.str1, o.str2, o.str3);
  }
  adapterMethod(clientObject)
  //adapterMethod函数的作为就在于对interfaceMethod函数进行包装,并把传递给它的参数转换为后者需要的形式。

适配器模式还可以用来适配两个库:

//先看它们在接口方面的差别
  //Prototype $ function
  function $(){
  var elements =new Array();
  for(var i=0;i<arguments.length;i++){
  var element = arguments[i];
  if(typeof element =='string'){
  element = document.getElementById(element);
  }
  if(typeof.length ==1) return element;
  elements.push(element);
  }
  return elements;
  }
  //YUI get method
  YAHOO.util.Dom.get =function(el){
  if(YAHOO.lang.isString(el)){
  return document.getElementById(el);
  }
  if(YAHOO.lang.isArray(el)){
  var c =[];
  for(var i=0,len=el.length;i<len;++i){
  c[c.length] = YAHOO.util.Dom.get(el[i]);
  }
  return c;
  }
  if(el){
  return el;
  }
  returnnull;
  }
  //二者区别就在于get具有一个参数,且可以是HTML,字符串或者数组;而$木有正是的参数,允许使用者传入任意数目的参数,不管HTML还是字符串。
  //如果需要从使用Prototype的$函数改为使用YUI的get方法(或者相反,那么用适配器模式其实很简单)
  function PrototypeToYUIAdapter(){
  return YAHOO.util.Dom.get(arguments);
  }
  function YUIToPrototypeAdapter(el){
  return $.apply(window,el instanceof Array?el:[el]);
  }

3.个人理解

1.就是期望的接口跟现有的接口之间存在差异,但是又不想修改原来的对象,这样就可以通过使用适配器模式来兼容;

2.适配器就是通过一个接口来包装对象,从而改变现有对象的接口为另外一个接口;

3.就是用一个接口包装现有类的接口。

js设计模式(6)---适配器模式的更多相关文章

  1. JS设计模式——11.适配器模式

    适配器模式概述 适配器模式可用来在现有接口和不兼容的类之间进行适配.使用这种模式的对象又叫包装器(wrapper). 适配器特点 从表面看,适配器模式很像门面模式.她们都要对别的对象进行包装并改变其呈 ...

  2. js设计模式总结1

    js设计模式有很多种,知道不代表会用,更不代表理解,为了更好的理解每个设计模式,对每个设计模式进行总结,以后只要看到总结,就能知道该设计模式的作用,以及模式存在的优缺点,使用范围. 本文主要参考张容铭 ...

  3. 每天一个设计模式-3 适配器模式(Adapteer)

    每天一个设计模式-3 适配器模式(Adapteer) 1.现实中的情况 旧式电脑的硬盘是串口的,直接与硬盘连接,新硬盘是并口的,显然新硬盘不能直接连在电脑上,于是就有了转接线.好了,今天的学习主题出来 ...

  4. JS设计模式(一)

    刚入职时,看过一段时间的设计模式,似懂非懂.不知不觉过去七个月了,对JS的理解更深刻了,数据结构与算法的基础也基本上算是过了一遍了,接下来要把设计模式搞定,然后不再深层次研究JS了,而是学习前端自动化 ...

  5. Head First 设计模式之适配器模式与外观模式

    Head First设计模式之适配器模式与外观模式 前言: 之前讲过装饰者模式,将对象包装起来并赋予新的职责,这一章我们也会将对象进行包装,只不过是让它们看起来不像自己而像是别的东西.这样就可以在设计 ...

  6. C#设计模式(7)——适配器模式(Adapter Pattern)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  7. js设计模式(12)---职责链模式

    0.前言 老实讲,看设计模式真得很痛苦,一则阅读过的代码太少:二则从来或者从没意识到使用过这些东西.所以我采用了看书(<js设计模式>)和阅读博客(大叔.alloyteam.聂微东)相结合 ...

  8. JS设计模式——5.单体模式

    JS设计模式——5.单体模式 http://www.cnblogs.com/JChen666/p/3610585.html   单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? ...

  9. Java(Android)编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)

    1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实 ...

  10. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

    原文:乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabc ...

随机推荐

  1. Linux 的启动流程

    转载:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 更多文档参见:http://pan.baidu.com/s/1hqo ...

  2. c++ 设计模式6 (Decorator 装饰模式)

    4. “单一职责”类模式 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式代表: Decorato ...

  3. Socket 之 c#实现Socket网络编程

    一.命名空间: 在网络环境下,最有用的两个命名空间是System.Net和 System.Net.Sockets. 1.System.Net:通常与较高程的操作有关,例如download或upload ...

  4. 如何使上层的div遮住的链接可以点击

    pointer-events属性 http://www.css88.com/book/css/properties/user-interface/pointer-events.htm 在上层的div中 ...

  5. 【谷歌市场安装】Google Play 闪退问题解决

    Google Play 安装后闪退,是因为手机没有内置GMS(Google Mobile Service) 框架. 由于谷歌退出了中国市场,国产手机很多都没有内置GMS, 导致Google Play ...

  6. 【转】jmeter 进行java request测试

    本周使用jmeter进行一个远程dubbo接口的性能测试,因为没有访问页面,本来开发可以写一个页面,进行http请求的调用,不过已经看到jmeter可以直接对java request进行测试,所以尝试 ...

  7. asp.net MVC 如何隐藏 Response Header 版本号

    根据借楼最少资源原则,有时候MVC需要隐藏自己的版本号,其实这里也是比较简单的,只需要在Global.ascx 的Application_Start()中添加一行代码既可 添加为  MVCHandle ...

  8. sql获取exec('')的返回值

    ) ) select @sql=('select @a=cNumber+1 from VoucherHistory where CardNumber='''+@CardNumber+'''') exe ...

  9. curl模拟浏览器进行phpQuery抓取数据

    报Warning: file_get_contents(http://www.dianping.com/shop/8042874) [function.file-get-contents]: fail ...

  10. Mac 在命令行快速切换目录 mark

    转自: http://www.ccvita.com/520.html ,略修改. 每天在命令行下,一大部分的工作都是一遍又一遍的输入 cd ~/some/very/deep/often-used/di ...