JavaScript 设计模式 适配器模式

发布于 2024-09-21 09:10:51 字数 2463 浏览 14 评论 0

适配器模式可用来在现有的接口和不兼容的类之间进行适配。使用这种模式的对象又叫做包装器,因为他们是在用一个新的接口包装另一个对象。借助适配器可以处理一些类与 API 不匹配、不能一同使用的情况。

注意: 适配器和门面虽然比较类似,但门面模式只是为了简化一个接口,并不提供额外的选择。适配器则要把一个接口转换为另一个接口,它并不会滤除某些能力,也不会简化接口

//适配器: 日常生活中: PS2 接口 (圆口)
// 新电脑(usb)      <----- ps2-to-usb  ------>     鼠标和键盘(圆口的)

// 程序中:简单的适配器

/*
               var obj = {                    // 鼠标和键盘(圆口)
                   str1:'111' , 
                str2:'222' ,
                str3:'333'
               };

               // 适配器方法
               function adapter(obj){
                    interfaceMethod(obj.str1,obj.st2,obj.st3);
               }

               // 新电脑 usb
               function interfaceMethod(x, y , z){
                           // 复杂的操作
               };
               */


// 企业开发中:javascript 库(extjs , jquery , yui , prototype ... ded ...)
// YAHOO 
// Prototype

// YAHOO (我们用雅虎的框架,但是 Prototype 程序员该怎么写代码,还怎么写就行啦!)
//模拟:根据 id 获得指定的 dom 元素
//Prototype $ function  (不需要传递任何的形参:一个 id 写一个参数 多个 id 多个参数)
function $(){
  var elements = [] ;
  for(var i = 0 ; i < arguments.length; i++){
    var element = arguments[i];
    if(typeof element == 'string')
      element = document.getElementById(element);
    if(arguments.length ==1)
      return element ;
    elements.push(element);
  }
  return elements;
}


// YUI get function (传递了一个参数 :类型不是字符串 就是数组)
var YAHOO = {};
YAHOO.get = function(el){
  if(typeof el == 'string'){
    return document.getElementById(el);
  } 
  if(el instanceof Array){
    var elements = [] ;
    for(var i = 0 ; i < el.length ; i++){
      elements[elements.length] = YAHOO.get(el[i]);
    }
    return elements;
  }
  if(el){
    return el ; 
  }
  return null;
};



YAHOO.get =  YUIToPrototypeAdapter ;

function YUIToPrototypeAdapter(){
  //对于 YUI 开发人员来说 永远传递一个参数
  if(arguments.length == 1){
    var e = arguments[0];
    return  $.apply(window,e instanceof Array?e:[e]);
  } else {
    return $.apply(window ,arguments);
  }
}



window.onload = function(){
  /*
                    // prototype 开发人员习惯的写法
                    var domarr = $('inp1','inp2');    
                    alert(domarr);
                    */
  /*
                    // YUI 开发人员习惯的写法
                    var domarr = YAHOO.get(['inp1','inp2']);    
                    alert(domarr); 
                    */


  // YUI  我是一个 prototype 用项目经理的说法
  var domarr = YAHOO.get(['inp1']);
  alert(domarr); 
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

入怼

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

linfzu01

文章 0 评论 0

可遇━不可求

文章 0 评论 0

枕梦

文章 0 评论 0

qq_3LFa8Q

文章 0 评论 0

JP

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文