JavaScript 设计模式 适配器模式
适配器模式可用来在现有的接口和不兼容的类之间进行适配。使用这种模式的对象又叫做包装器,因为他们是在用一个新的接口包装另一个对象。借助适配器可以处理一些类与 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论