javascript設計模式-適配器模式(8)

適配器模式可用在現有的接口和不兼容的類之間進行適配。使用這種模式的對象又叫做包裝器(wrapper),因爲他們是在用一個新的接口包裝另一個對象。藉助適配器可以處理一些類與API不匹配、不能一同使用的情況。適配器是要把一個接口轉換爲另一個接口,它並不會濾除某些功能,也不會簡化接口

// 程序中:簡單的適配器


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); 
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章