资讯专栏INFORMATION COLUMN

转换插座之适配器模式

MudOnTire / 1057人阅读

摘要:适配器模式之数据格式转换适配器模式不仅可以起到适配接口名的作用,它另外还有一个功能就是能统一不同格式的作用。我们的目的就是在程序中,不要出现适配器模式,但考虑到实际,这也是不可能的,所以尽量将代码设计符合规范是非常必要的。

这个模式应该算是除了单例模式以外最简单的一个模式,没有多余的类,这个模式只有一个职责,就是转换的你接口参数,归一化接口调用函数,同意参数格式。
说人话~
其实就是,将不同东西,加上同一个包装。
而这个模式,我们应该早熟悉了。
在命令模式的中,有这样一段代码:

//封装命令
var MoveUp = function(exer){
    this.exer = exer;
}
MoveUp.prototype.do = function(){
    this.exer.moveUP();
}
var MoveDown = function(exer){
    this.exer = exer;
}
MoveDown.prototype.do = function(){
    this.exer.moveDown();
}
var MoveLeft = function(exer){
    this.exer = exer;
}
MoveLeft.prototype.do = function(){
    this.exer.moveLeft();
}
var MoveRight = function(exer){
    this.exer = exer;
}

在不同的命令中,我们使用类将原本接口不一致的命令适配为同一个接口的函数。而适配器的精华就体现在这里,要知道,他和代理模式一样,只起到一个中间层的作用,实质上并不会改变一个整体架构。 而我们大费周章的将他列为一个模式是很有代理的。因为在实际开发当中,我们必定会使用到一些第三方的API,有时候leader高瞻远瞩往往会使用多个相同功能的 不同提供商的 API(是不是傻啊~). 现实是,这些提供商的API要么名字不一样,要么参数不统一,但是必须要用,那就可以使用适配器模式来进行转化。
比如一个调 "评论模块" 的API
多说里面是. DS.comment().
Disqus的是. DQ.commentary().
(上面是我意淫的接口)
首先,leader的要求是,一开始使用多说的评论。(鬼信啊,万一以后你又用Disqus,那我还怎么过年)
我们这里可以使用适配器模式给自己留一条后路

var _disqus = {  //disqus评论插件
    comment(){
        disqus.commentary();
    }
}
var _DS = {  //多说评论插件
    comment(){
        DS.comment();
    }
}
var command = function(comment){
    comment.comment();
}
//使用多说的评论
command(_DS);

以后万一leader不爽多说了,想换,你也是轻而易举的。

适配器模式之数据格式转换

适配器模式不仅可以起到适配接口名的作用,它另外还有一个功能就是能统一不同格式的作用。
在某个接口中,使用的数据格式是这样的。

[{
    name:"sam",
    year:12,
    gender:"male"
}]

但是由于后台SB的不准守文档,使用了这样的格式。

{
    sam: {
        year: 12,
        gender: "male"
    },
    ...
}

但是,你的js已经按照文档的要求完成了任务标准,而此时,后台已经把后台接口写好了,估计现在度假去了。没办法,只有改动了,现在有两种选择,一种是直接破坏你原来写好的程序逻辑,还有一种是使用适配器模式直接改写。
我的话,我会选择,适!配!器!模!式!
我们可以自定义一个格式转化类

var json = {
    sam: {
        year: 12,
        gender: "male"
    },
    jimmy:{
        year:22,
        gender:"female"
    }
}
function adaption(para){
    var keys = Object.keys(para),
        obj = [];
    for(var i = 0,temp,key; key = keys[i++];){
        temp = para[key];
        temp.name = key;
        obj.push(temp);
    }
    return obj;
}
console.log(adaption(json));

然后在参数传递过程中,直接使用adaption以后的数据就可以了。

大话适配器模式

由于适配器是作为弥补的一种手段,而不是作为一开始代码设计的原则,所以,大家在代码构思的时候尽量将接口实现统一这才是最棒的模式。 我们的目的就是在程序中,不要出现适配器模式,但考虑到实际,这也是不可能的,所以尽量将代码设计符合规范是非常必要的。
ending~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78545.html

相关文章

  • 慕课网_《模式的秘密配器模式》学习总结

    摘要:时间年月日星期二说明本文部分内容均来自慕课网。慕课网教学源码学习源码第一章适配器模式的简介简介生活中的适配器翻译软件插座适配器适配器模式定义适配器模式讲将一个类的接口,转换成客户期望的另外一个接口。 时间:2017年08月29日星期二说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:https://github.com/zccodere/s.....

    andong777 评论0 收藏0
  • 设计模式配器模式

    摘要:定义和类型定义将一个类的接口转换成客户期望的另一个接口,适配器模式让那些不兼容的类可以一起工作。类型结构型类适配器模式类适配器模式使用继承的方式去实现接口适配。它是适配器模式的核心。 0x01.定义和类型 定义:将一个类的接口转换成客户期望的另一个接口,适配器模式让那些不兼容的类可以一起工作。 类型:结构型 a.类适配器模式 类适配器模式:使用继承的方式去实现接口适配。 UML:...

    booster 评论0 收藏0
  • 一天一个设计模式JS实现——配器模式

    摘要:本文参考于设计模式课程设计模式之适配器模式设计模式是一套被反复使用的多数人知晓的经过分类编目的代码设计经验的总结。第一个设计模式是适配器模式。总的来说适配器就是的模式,与修饰模式直接无感使用不同,适配器模式使用对象变为。 本文参考于:设计模式课程设计模式之适配器模式 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被...

    Aceyclee 评论0 收藏0
  • 开发路(设计模式七:配器模式

    摘要:你眼中的适配器是什么样子的呢在设计模式中也有模式叫适配器模式,一起来看看吧。定义适配器模式将一个类的接口,转换成客户期待的另一个接口。 你眼中的适配器是什么样子的呢?在设计模式中也有模式叫适配器模式,一起来看看吧。 适配器是什么这不需要作者我多解释把,打个比方,在国内用的是220V的电器,但国外有些国家是110V甚至240V的也有等等,国内的充电线就不能直接插国外的插...

    solocoder 评论0 收藏0
  • 配器设计模式(应用于活动业务)

    摘要:适配器的适用场景代码的复用性强。客户端使用目标接口,与和目标接口一致的对象合作。被适配者一个现存需要适配的接口。适配器负责将的接口转换为的接口。适配器是一个具体的类,这是该模式的核心。适配器分为类适配器和对象适配器两种,下面将详细讲述。 适配器的适用场景 代码的复用性强。 我们一直在使用适配器,如果 只有USB连接头,无法将手机插到标准的插座上面充电 ,这时需要的一个适配器,一端接U...

    sunnyxd 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<