js设计模式【详解】—— 适配器模式

简介: js设计模式【详解】—— 适配器模式

适配器模式的定义

适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

用途:将无法使用的接口转换成可以使用的接口

使用场景:库的适配、参数的适配、数据的适配

注意事项:适配器模式本质上是一个亡羊补牢的模式,它解决的是现存的两个接口之间不兼容的问题,不应该在软件的初期开发阶段就使用该模式;如果在设计之初就能够统筹的规划好接口的一致性,那么适配器就应该尽量减少使用。

适配器模式——库的适配

百度统计提供的埋点接口格式如下

_hmt.push(['_trackEvent', category, action, opt_label,opt_value]);

神策数据提供的埋点接口格式如下:

sa.track(eventName, {
  attrName: value 
})

现需将百度统计的_htm.push接口更改成为神策提供的sa.track接口,可以写一个适配器完成所有埋点事件的迁移:

//app.js
 
let _hmt = {
  push: (arr) {
    
    const [eventName, attrName, value] = [...arr.splice(2)];
    
    let attrObj = {
      [attrName]: value
    };
 
    sa.track(eventName, attrObj);
  }
}

分析比较百度统计的接口和神策的接口,可知在神策中只需要传入三个参数,eventName对应的是百度统计接口中的action, attrName对应的是百度统计接口中的opt_label, value对应的是百度统计接口中的opt_value; 删除了百度统计的SDK后,SDK所提供的_htm这个全局变量也就不存在了,可以利用该变量名做适配器,在push方法获取sa.track所需要的三个参数并调用sa.track即可。

适配器模式——参数的适配

例如在SDK这个类中有一个phoneStatus,需要传入五个参数用于接收手机的相关信息:

class SDK {
  phoneStatus(brand, os, carrier, language, network) {
 
    //dosomething.....
  }
}

在传入的参数大于3的时候,可以考虑将参数合并为一个对象的形式,下面我们将phoneStatus的参数接口定义如下(String代表参数类型,?: 代表可选项)

{
  brand: String
  os: String
  carrier:? String
  language:? String
  network:? String
}

carrierlanguagenetwork这三个属性不是必须传入的,在方法内部可能被设置一些默认值。所以这时可以在方法内部采用适配器来适配这个参数对象。

class SDK {
  phoneStatus(config) {
    
    let defaultConfig = {
      brand: null,  //手机品牌
      os: null, //系统类型: Andoird或 iOS
      carrier: 'china-mobile', //运营商,默认中国移动
      language: 'zh', //语言类型,默认中文
      network: 'wifi', //网络类型,默认wifi
    }
    
    //参数适配
    for( let i in config) {
      defaultConfig[i] = config[i] || defaultConfig[i];
    }
    
    //dosomething.....
  }
}

适配器模式——数据的适配

通常服务器端传递的数据和前端需要使用的数据格式不一致,这时需要对后端的数据格式进行适配。

例如后端返回的数据格式为:

[
  {
    "day": "周一",
    "uv": 6300
  },
  {
    "day": "周二",
    "uv": 7100
  },  {
    "day": "周三",
    "uv": 4300
  },  {
    "day": "周四",
    "uv": 3300
  },  {
    "day": "周五",
    "uv": 8300
  },  {
    "day": "周六",
    "uv": 9300
  }, {
    "day": "周日",
    "uv": 11300
  }
]

但Echarts需要的x轴的数据格式和坐标点的数据是:

["周二", "周二", "周三", "周四", "周五", "周六", "周日"] //x轴的数据
 
[6300. 7100, 4300, 3300, 8300, 9300, 11300] //坐标点的数据

这时就可以使用适配器,将后端的返回数据做适配:

//x轴适配器
function echartXAxisAdapter(res) {
  return res.map(item => item.day);
}
 
//坐标点适配器
function echartDataAdapter(res) {
  return res.map(item => item.uv);
}

更多设计模式详见——js设计模式【详解】总目录

https://blog.csdn.net/weixin_41192489/article/details/116154815

目录
相关文章
|
6月前
|
设计模式 前端开发 Java
【设计模式】【结构型模式】适配器模式(Adpter)
一、入门 什么是适配器模式? 适配器模式是Java中常用的结构型设计模式,它的核心作用就像现实中的电源转换器一样---让原本不兼容的两个接口能够协同工作。 为什么要用适配器模式? 假设我们需要在电商系
168 10
|
设计模式 JavaScript 前端开发
JavaScript设计模式--访问者模式
【10月更文挑战第1天】
295 124
|
10月前
|
设计模式 Java 开发者
「全网最细 + 实战源码案例」设计模式——适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,通过引入适配器类将一个类的接口转换为客户端期望的另一个接口,使原本因接口不兼容而无法协作的类能够协同工作。适配器模式分为类适配器和对象适配器两种,前者通过多重继承实现,后者通过组合方式实现,更常用。该模式适用于遗留系统改造、接口转换和第三方库集成等场景,能提高代码复用性和灵活性,但也可能增加代码复杂性和性能开销。
356 28
|
9月前
|
设计模式 JavaScript 算法
浅谈几种js设计模式
设计模式是软件开发中的宝贵工具,能够提高代码的可维护性和扩展性。通过单例模式、工厂模式、观察者模式和策略模式,我们可以解决不同场景下的实际问题,编写更加优雅和高效的代码。
283 8
|
11月前
|
设计模式 JSON 前端开发
前端必须掌握的设计模式——适配器模式
适配器模式是一种结构型设计模式,用于使接口不兼容的对象能够相互合作。通过在客户端和系统之间引入一个“中间层”适配器,将不同类型的输入数据转换为系统能处理的标准格式,减轻系统的负担,提高扩展性和可维护性。例如,MacBook的扩展坞将多种接口(如HDMI、USB)转换为Type-C接口,实现多接口兼容。
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
174 2
|
设计模式 Java 程序员
Java设计模式-适配器模式(8)
Java设计模式-适配器模式(8)
107 2
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
272 1
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
222 0
|
设计模式 XML 存储
【六】设计模式~~~结构型模式~~~适配器模式(Java)
文章详细介绍了适配器模式(Adapter Pattern),这是一种结构型设计模式,用于将一个类的接口转换成客户期望的另一个接口,使原本不兼容的接口能够一起工作,提高了类的复用性和系统的灵活性。通过对象适配器和类适配器两种实现方式,展示了适配器模式的代码应用,并讨论了其优点、缺点以及适用场景。

热门文章

最新文章