適配器模式可用在現有的接口和不兼容的類之間進行適配。使用這種模式的對象又叫做包裝器(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);
};