JavaScript设计模式之适配器模式介绍

作者:junjie 时间:2023-08-12 06:36:09 

适配器模式说明


说明: 适配器模式,一般是为要使用的接口,不符本应用或本系统使用,而需引入的中间适配层类或对象的情况;

场景: 就好比我们买了台手机,买回来后发现,充电线插头是三插头,但家里,只有两插头的口的插座,怎么办?为了方便,也有为能在任何地方都能充上电,就得去买个通用充电适配器; 这样手机才能在自己家里充上电;不然只能放着,或跑到有这个插头的地方充电;

实际开发环境下,由于旧的系统,或第三方应用提供的接口,与我们定义的接口不匹配,在以面向接口编程的环境下,就无法使用这样旧的,或第三方的接口,这时我们就使用适配类继承待适匹配的类,并让适配类实现接口的方式来引入旧的系统或第三方应用的接口;

这样使用接口编程时,就可以使用这个适匹配类,来间接调用旧的系统或第三方应用的接口。

在 Javascript 要实现类似动态面向对象语言的适配器模式的代码,可以使用到 prototype 的继承实例来实现;因为是基于接口约束的,但是Javascript没有接口这号东西,我们去掉接口这一层,直接实现接口实现类 Target ,模拟类似的源码出来;

源码实例

1. 待适配的类及接口方法:


function Adaptee() {
    this.name = 'Adaptee';
}
Adaptee.prototype.getName = function() {
    return this.name;
}

2. 普通实现类 [由于 Javascript 中没有接口,所以就直接提供实现类]


function Target() {
    this.name = 'Target';
}

Target.prototype.queryName= function() {

    return this.name;
}

3. 适配类:



function Adapte() {
    this.name = '';
}


Adapte.prototype = new Adaptee();

Adapte.prototype.queryName = function() {
    this.getName();
}


4.使用方法:



var local = new Target();
local.queryName(); //调用普通实现类


var adapte = new Adapte();
adapte.queryName(); //调用旧的系统或第三方应用接口;


其他说明


上面第四步,var local 以及 var adapte 类似像 Java,C# 这样的面向对象语言中接口引用指定,如:



interface Target {
    public String queryName();
}
//接口引用指向
Target local = new RealTarget(); //即上面 Javascript 的 Target 实现类
local.queryName();


//适配器
Target adapte = new Adapte();
adapte.queryName();


可见适配器类是连接接口与目标类接口的中间层;就是用来解决,需要的目标已经存在了,但我们无法直接使用,不能跟我们的代码定义协同使用,就得使用适器模式,适配器模式也叫转换模式,包装模式;

标签:JavaScript,设计模式,适配器模式
0
投稿

猜你喜欢

  • 微信小程序实现图片上传功能实例(前端+PHP后端)

    2023-11-05 14:19:27
  • SQL Server 2008 清空删除日志文件(瞬间日志变几M)

    2024-01-21 13:06:47
  • 通过数据库对Django进行删除字段和删除模型的操作

    2024-01-19 09:28:44
  • Pyqt清空某一个QTreeewidgetItem下的所有分支方法

    2022-01-24 10:29:46
  • scrapy自定义pipeline类实现将采集数据保存到mongodb的方法

    2021-03-20 02:55:59
  • 对TensorFlow中的variables_to_restore函数详解

    2022-09-11 00:49:19
  • MySQL source导入很慢的解决方法

    2024-01-25 18:25:49
  • python OpenCV学习笔记实现二维直方图

    2021-08-17 11:23:49
  • MySQL长字符截断的实现示例

    2024-01-25 23:55:01
  • python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法

    2023-01-11 08:11:07
  • Python实现拼接多张图片的方法

    2022-07-22 12:58:13
  • Python 学习笔记

    2022-06-18 07:12:31
  • python利用正则表达式搜索单词示例代码

    2023-02-21 11:31:03
  • 微信小程序自定义底部弹出框动画

    2024-05-02 16:14:30
  • python使用pandas处理excel文件转为csv文件的方法示例

    2021-09-13 07:15:52
  • pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换

    2023-08-12 07:44:34
  • 屏蔽浏览器缓存另类方法

    2023-11-21 08:09:23
  • chatgpt国内镜像 pycharm idea插件使用详解

    2022-03-29 10:08:41
  • 正确使用字体和颜色 让网页内容更易阅读

    2007-09-13 18:45:00
  • javaScript合并对象的几个常见方式

    2024-04-16 08:58:26
  • asp之家 网络编程 m.aspxhome.com