Le modèle d'adaptateur est principalement utilisé pour résoudre le problème de non-concordance entre deux interfaces existantes. Il ne prend pas en compte la manière dont ces interfaces sont implémentées. , sans considérer comment ils pourraient évoluer dans le futur. Le modèle d'adaptateur permet aux interfaces existantes de fonctionner ensemble sans les modifier.
Un alias pour un adaptateur est wrapper (wrapper
), qui est un modèle relativement simple. Il existe de nombreux scénarios dans le développement de programmes : lorsque l'on tente d'appeler une interface d'un module ou d'un objet, on constate que le format de cette interface ne répond pas aux besoins actuels. Il existe actuellement deux solutions : la première consiste à modifier l'implémentation de l'interface d'origine. Cependant, si le module d'origine est très complexe, ou si le module que nous obtenons est un code compressé écrit par quelqu'un d'autre, modifier l'interface d'origine n'est pas réaliste. . La deuxième méthode consiste à créer un adaptateur pour convertir l'interface d'origine en une autre interface souhaitée par le client. Le client n'a qu'à s'occuper de l'adaptateur.
Il existe de nombreux exemples d'adaptateurs dans la réalité : prises de courant, adaptateurs USB, etc. ; par exemple, la prise casque de l'iPhone 7 est passée d'une interface à trou rond de 3,5 mm à l'interface Lightning exclusive d'Apple. De nombreuses personnes ont besoin d'un adaptateur ci-dessous pour leurs anciens écouteurs ronds afin d'écouter de la musique sur leur iPhone nouvellement acheté.
Lorsque nous appliquons à googleMap 和
baiduMap都发出“显示”请求时,
googleMap和
baiduMap` affiche la carte sur la page à sa manière
const googleMap = { show: function () { console.log('开始渲染谷歌地图'); } };const baiduMap = { show: function () { console.log('开始渲染百度地图'); } };const renderMap = function (map) { if (map.show instanceof Function) { map.show(); } }; renderMap(googleMap); // 输出:开始渲染谷歌地图renderMap(baiduMap); // 输出:开始渲染百度地图
La clé du bon fonctionnement de ce programme est que googleMap
et baiduMap
fournissent la même show
méthode, mais la Les méthodes d'interface des trois parties ne sont pas sous notre propre contrôle. Et si la méthode d'affichage de la carte fournie par baiduMap
n'était pas appelée show
mais appelée display
?
baiduMap
Cet objet provient d'un tiers. Dans des circonstances normales, nous ne devrions pas le modifier, et parfois nous ne pouvons pas le modifier. À ce stade, nous pouvons résoudre le problème en ajoutant baiduMapAdapter
:
const googleMap = { show: function () { console.log('开始渲染谷歌地图'); } };const baiduMap = { display: function () { console.log('开始渲染百度地图'); } };const baiduMapAdapter = { show: function(){ return baiduMap.display(); } }; renderMap(googleMap); // 输出:开始渲染谷歌地图renderMap(baiduMapAdapter); // 输出:开始渲染百度地图
Dans certains cas, une méthode peut devoir transmettre plusieurs paramètres, par exemple, lors de la surveillance de certains SDK signalés, de nombreuses données peuvent être collectées. Il y a un systemInfo
dans cette classe, et cinq paramètres doivent être transmis pour recevoir des informations pertinentes sur le téléphone mobile :
class SDK { systemInf(brand, os, carrier, language, network) { //dosomething..... } }
. Ci-dessous, nous pouvons définir l'interface des paramètres de $.ajax
comme suit (String représente le type de paramètre, systemInfo
représente facultatif) ?:
{ brand: String os: String carrier:? String language:? String network:? String}
class SDK { systemInf(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 } ]
["周二", "周二", "周三", "周四", "周五", "周六", "周日"] //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); }
Modèles de conception (adaptateurs)
Série de modèles de conception JavaScript 5 : modèle d'adaptateur
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!