一看就懂的JavaScript适配器模式图解及使用示例

 更新时间:2022年12月22日 10:18:07   作者:qb  
这篇文章主要为大家介绍了JavaScript适配器模式图解及使用示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

适配器模式是用来解决两个软件实体之间不兼容的问题的设计模式。

举个两实体不匹配例子:

假如这两块要契合在一起,怎么办?

对喽,咱们先给A实体造个适配器,如下:

再把A实体往右推一下:

通过适配器,咱们就把A实体和B实体结合到了一起了。

完美,再看适配器在代码中的例子。

场景为:有个实体A,需要将实体A传入实体B中,实体B返回其name对应的数据,包含名称、地址和年龄。

// 实体A
var instanceA = [{
        name: '张三',
        address: '北京',
        age: 20,
    },
    {
        name: '李四',
        address: '天津',
        age: 25,
    },
    {
        name: '王五',
        address: '河北',
        age: 30,
    }
]
// 实体B
var instanceB = function (data, name) {
    return data[name]
}
// 实体A在实体B中进行调用
console.log(instanceB(instanceA, '张三')) // undefined

这里先定义实体A作为数据,定义实体B作为调用函数,将实体A放入实体B中,我们执行可以发现返回的是undefined

此时,我们定义一个适配器。

var dataAdapter = function (arr) {
    return arr.reduce((accumulator, currentValue) => {
        accumulator[currentValue['name']] = currentValue
        return accumulator
    }, {})
}

通过适配器,将数组对象转换成name作为key{name:xxx, address:xxx, age:xxx}作为value的对象。

然后,将实体A进行适配器的处理,再塞入到实体B中。

console.log(instanceB(dataAdapter(instanceA), '张三')) // {"name": "张三", "address": "北京", "age": 20}

这样,通过适配器dataAdapter,就可以将实体A在实体B进行使用,实现了两个不同实体之间不兼容的问题。

总结

适配器模式是用来解决两个软件实体之间不兼容的问题的设计模式,可以在不改变实体内部结构的情况下,在其中一个实体外层包装一个适配器,再去将两个实体进行配合使用。

以上就是一看就懂的JavaScript适配器模式图解及使用示例的详细内容,更多关于JavaScript适配器模式的资料请关注脚本之家其它相关文章!

相关文章

  • 微信小程序 Page()函数详解

    微信小程序 Page()函数详解

    这篇文章主要介绍了微信小程序 Page()函数详解的相关资料,在开发过程中肯定会遇到Page()函数,希望能帮助到大家,需要的朋友可以参考下
    2016-10-10
  • JavaScript监测数据类型方法全面总结

    JavaScript监测数据类型方法全面总结

    这篇文章主要为大家介绍了JavaScript监测数据类型方法示例全面总结,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • JS ES新特性之变量的解耦赋值

    JS ES新特性之变量的解耦赋值

    这篇文章主要介绍了JS ES新特性变量的解耦赋值,ECMAScript 2015中允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为 解耦赋值 ,下面一起进入文章学习该内容,需要的朋友也可以参考一下
    2021-12-12
  • 详解微信小程序 template添加绑定事件

    详解微信小程序 template添加绑定事件

    这篇文章主要介绍了详解微信小程序 template添加绑定事件的相关资料,需要的朋友可以参考下
    2017-06-06
  • 微信小程序实现给循环列表添加点击样式实例

    微信小程序实现给循环列表添加点击样式实例

    这篇文章主要介绍了微信小程序实现给循环列表添加点击样式实例的相关资料,需要的朋友可以参考下
    2017-04-04
  • JS前端使用canvas搞一个手势识别

    JS前端使用canvas搞一个手势识别

    这篇文章主要为大家介绍了JS前端使用canvas搞一个手势识别的实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • JavaScript代码不能被阻断的稳定性建设

    JavaScript代码不能被阻断的稳定性建设

    这篇文章主要为大家介绍了JavaScript代码不能被阻断的稳定性建设详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • lodash内部方法getData和setData实例解析

    lodash内部方法getData和setData实例解析

    本篇章我们将了解lodash里内部关于Data的操作方法,重点关注getData、setData两个内部方法,同时由实现上引申其他内部封装的方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Fabric.js 保存自定义属性方法示例

    Fabric.js 保存自定义属性方法示例

    这篇文章主要为大家介绍了Fabric.js 保存自定义属性方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 微信小程序 生命周期函数详解

    微信小程序 生命周期函数详解

    这篇文章主要介绍了微信小程序 生命周期函数的相关资料,需要的朋友可以参考下
    2017-05-05

最新评论