JavaScript设计模式(九):水管弯弯-适配器模式

简介: 水管弯弯-适配器模式

适配器模式(Adapter)

将一个类(对象)的接口(方法或者属性)转化成另外一个接口,以满足用户需求,使类(对象)之间接口的不兼容问题通过适配器得以解决。

适配异类框架

团队内存在一个和jQuery类似的A代码库,但是现在要代码库中的方法适配到jQuery上,该如何实现?

  • A代码库

      // 团队内部创建的A代码库
      const A = {
         
          // 通过ID获取元素
          g(id) {
         
              return document.getElementById(id)
          },
          // 为元素绑定事件
          on(id, type, fn) {
         
              // 如果传递参数是字符串则以id处理,否则以元素对象处理
              var dom = typeof id === 'string' ? this.g(id) : id;
              // 标准DOM2级添加事件方式
              if (dom.addEventListener) {
         
                  dom.addEventListener(type, fn, false);
                  // IE DOM2级添加事件方式
              } else if (dom.attachEvent) {
         
                  dom.attachEvent('on' + type, fn);
                  // 简易添加事件方式
              } else {
         
                  dom['on' + type] = fn;
              }
          }
      };
    
      // 窗口加载完成事件
      A.on(window, 'load', function () {
         
          // 按钮点击事件
          A.on('btn01', 'click', function (e) {
         
              // do something
              console.log('AAA');
          });
      });
    
  • 适配实现:

      const A = {
         
          // 通过ID获取元素
          g(id) {
         
              // 通过jQuery获取jQuery对象,然后返回第一个成员
              return $(id).get(0);
          },
          // 为元素绑定事件
          on(id, type, fn) {
         
              // 如果传递参数是字符串则以id处理,否则以元素对象处理
              var dom = typeof id === 'string' ? {
         mathJaxContainer[0]}(id);
              dom.on(type, fn);
          }
      };
    
      // 窗口加载完成事件
      A.on(window, 'load', function () {
         
          // 按钮点击事件
          A.on('btn01', 'click', function (e) {
         
              // do something
              console.log('AAA');
          });
      });
    

参数适配

当一个方法的传参有固定的顺序是我们很难进行适配,因为第三方的框架可能不能完美的契合我们写的传参顺序方法,解决方法如下:

通过传入对象的方式进行参数的适配 (数组格式的数据我们一般也会处理成对象的格式在进行传参)

function funA({
    name, age }) {
   
    console.log(name, age);
}

let data1 = {
   
    name: 'Lee',
    age: 18
};

let data2 = {
   
    age: 18,
    name: 'Lee'
};

// 无所谓对象内部的顺序,打印结果一样
funA(data1); // Lee 18
funA(data2); // Lee 18
目录
相关文章
|
1月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Adapter(适配器模式)
【设计模式】JAVA Design Patterns——Adapter(适配器模式)
|
2天前
|
设计模式 JavaScript 前端开发
[JavaScript设计模式]惰性单例模式
[JavaScript设计模式]惰性单例模式
|
3天前
|
设计模式
适配器模式-大话设计模式
适配器模式-大话设计模式
8 2
|
20天前
|
设计模式 Java C#
【设计模式】第六篇:来康康适配器模式
类适配器模式 主要使用继承实现,耦合度高,且在单继承的语言中使用会受限,还需要防止继承带来的一些问题
18 5
|
1天前
|
设计模式 JavaScript 前端开发
JavaScript设计模式——代理模式
JavaScript设计模式——代理模式
|
2天前
|
设计模式 Java Android开发
Java设计模式:适配器模式的三种形式(五)
Java设计模式:适配器模式的三种形式(五)
|
2天前
|
设计模式 Java
Java设计模式之适配器模式详解
Java设计模式之适配器模式详解
|
8天前
|
设计模式 程序员
结构型设计模式之适配器模式
结构型设计模式之适配器模式
|
21天前
|
设计模式 算法 关系型数据库
设计模式第七讲-外观模式、适配器模式、模板方法模式详解
系统要求所有的数据库帮助类必须实现ISqlHelp接口,面向该接口编程,如SQLServerHelp类。 此时第三方提供了一个新的MySql的帮助类(假设是dll,不能修改),它的编程规范和ISqlHelp不兼容,这个时候就需要引入适配器类,使二者能相互兼容。
148 0
|
1月前
|
设计模式 JavaScript 前端开发
js设计模式-观察者模式与发布/订阅模式
观察者模式和发布/订阅模式是JavaScript中的两种设计模式,用于处理对象间的通信和事件处理。观察者模式中,一个主题对象状态改变会通知所有观察者。实现包括定义主题和观察者对象,以及在主题中添加、删除和通知观察者的功能。发布/订阅模式则引入事件管理器,允许发布者发布事件,订阅者通过订阅接收通知。