Table des matières
Modèle d'adaptateur (Adapter)
2. Scénarios d'utilisation du mode adaptateur
2.1 Adaptation de l'interface
2.2 Adaptation des paramètres
Maison interface Web js tutoriel Une brève introduction au modèle d'adaptateur de modèles de conception JavaScript

Une brève introduction au modèle d'adaptateur de modèles de conception JavaScript

Aug 06, 2018 am 09:40 AM

Modèle d'adaptateur (Adapter)

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é.

2. Scénarios d'utilisation du mode adaptateur

2.1 Adaptation de l'interface

Lorsque nous appliquons à googleMap 和baiduMap都发出“显示”请求时,googleMapbaiduMap` 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);  // 输出:开始渲染百度地图
Copier après la connexion

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); // 输出:开始渲染百度地图
Copier après la connexion

2.2 Adaptation des paramètres

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.....
  }
}
Copier après la connexion
<. 🎜> est généralement transmis. Lorsque les paramètres sont supérieurs à 3, nous pouvons envisager de fusionner les paramètres en un seul objet, tout comme ce que nous avons fait avec

. 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}
Copier après la connexion
On peut voir que les trois attributs de l'opérateur, de la langue et du réseau ne le font pas doivent être transmis Entré, ils peuvent être définis sur certaines valeurs par défaut à l'intérieur de la méthode. Donc à ce stade, nous pouvons utiliser un adaptateur à l’intérieur de la méthode pour nous adapter à cet objet paramètre. Cette méthode est courante dans nos plug-ins ou packages npm ;

class SDK {
  systemInf(config) {    let defaultConfig = {
      brand: null,  //手机品牌
      os: null, //系统类型: Andoird或 iOS
      carrier: &#39;china-mobile&#39;, //运营商,默认中国移动
      language: &#39;zh&#39;, //语言类型,默认中文
      network: &#39;wifi&#39;, //网络类型,默认wifi
    }    //参数适配
    for( let i in config) {
      defaultConfig[i] = config[i] || defaultConfig[i];
    }    //dosomething.....
  }
}
Copier après la connexion
2.3 Adaptation des données

L'adaptation des données est le scénario le plus courant dans le front-end. résoudre les dépendances de données entre le front-end et le back-end. Habituellement, les données transmises par le serveur ne correspondent pas au format de données que nous devons utiliser sur le front-end. Surtout lors de l'utilisation de certains frameworks d'interface utilisateur, les données spécifiées par le framework ont ​​un format fixe. Par conséquent, nous devons actuellement adapter le format des données back-end.

Par exemple, il y a un uv hebdomadaire sur le site Web utilisant le graphique linéaire Echarts. Habituellement, le format de données renvoyé par le backend est le suivant :

[
  {    "day": "周一",    "uv": 6300
  },
  {    "day": "周二",    "uv": 7100
  },  {    "day": "周三",    "uv": 4300
  },  {    "day": "周四",    "uv": 3300
  },  {    "day": "周五",    "uv": 8300
  },  {    "day": "周六",    "uv": 9300
  }, {    "day": "周日",    "uv": 11300
  }
]
Copier après la connexion
Mais Echarts nécessite des données sur l'axe des x. Le format et les données des points de coordonnées sont les suivants :

["周二", "周二", "周三", "周四", "周五", "周六", "周日"] //x轴的数据[6300. 7100, 4300, 3300, 8300, 9300, 11300] //坐标点的数据
Copier après la connexion
Nous pouvons donc utiliser un adaptateur pour adapter les données de retour du back-end :

//x轴适配器function echartXAxisAdapter(res) {
  return res.map(item => item.day);
}//坐标点适配器function echartDataAdapter(res) {
  return res.map(item => item.uv);
}
Copier après la connexion
3 Résumé

Le modèle d'adaptateur est une paire de modèles relativement simples. Cependant, le modèle d'adaptateur a de nombreux scénarios d'utilisation dans JS. En termes d'adaptation des paramètres, de nombreuses bibliothèques et frameworks utilisent le modèle d'adaptateur. L'adaptation des données est très importante pour résoudre les dépendances de données front-end et back-end. Ce que nous devons comprendre, c'est que le mode adaptateur est essentiellement un mode de « rattrapage ». Il résout le problème d'incompatibilité entre les deux interfaces existantes. Vous ne devez pas utiliser ce mode au début du développement du logiciel ; Dès le début de la conception, nous pouvons prévoir la cohérence de l'interface dans son ensemble, l'adaptateur doit donc être utilisé le moins possible.

Les adaptateurs en JavaScript sont davantage utilisés entre les objets. Afin de rendre l'objet utilisable, nous divisons et réassemblons généralement l'objet, nous devons donc comprendre la structure interne de l'objet adaptatif, qui est également la différence entre Le mode d'apparition est, bien sûr, que le mode d'allocation résout également le couplage entre les objets. Le code d'adaptation packagé augmente une certaine consommation de ressources, mais celle-ci est minime.

Articles connexes :

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que dois-je faire si je rencontre l'impression de code brouillé pour les reçus en papier thermique frontal? Que dois-je faire si je rencontre l'impression de code brouillé pour les reçus en papier thermique frontal? Apr 04, 2025 pm 02:42 PM

Des questions et des solutions fréquemment posées pour l'impression de billets thermiques frontaux pour le développement frontal, l'impression de billets est une exigence commune. Cependant, de nombreux développeurs mettent en œuvre ...

Qui est payé plus de python ou de javascript? Qui est payé plus de python ou de javascript? Apr 04, 2025 am 12:09 AM

Il n'y a pas de salaire absolu pour les développeurs Python et JavaScript, selon les compétences et les besoins de l'industrie. 1. Python peut être davantage payé en science des données et en apprentissage automatique. 2. JavaScript a une grande demande dans le développement frontal et complet, et son salaire est également considérable. 3. Les facteurs d'influence comprennent l'expérience, la localisation géographique, la taille de l'entreprise et les compétences spécifiques.

Démystifier javascript: ce qu'il fait et pourquoi c'est important Démystifier javascript: ce qu'il fait et pourquoi c'est important Apr 09, 2025 am 12:07 AM

JavaScript est la pierre angulaire du développement Web moderne, et ses principales fonctions incluent la programmation axée sur les événements, la génération de contenu dynamique et la programmation asynchrone. 1) La programmation axée sur les événements permet aux pages Web de changer dynamiquement en fonction des opérations utilisateur. 2) La génération de contenu dynamique permet d'ajuster le contenu de la page en fonction des conditions. 3) La programmation asynchrone garantit que l'interface utilisateur n'est pas bloquée. JavaScript est largement utilisé dans l'interaction Web, les applications à une page et le développement côté serveur, améliorant considérablement la flexibilité de l'expérience utilisateur et du développement multiplateforme.

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en utilisant JavaScript? Comment fusionner les éléments du tableau avec le même ID dans un seul objet en utilisant JavaScript? Apr 04, 2025 pm 05:09 PM

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en JavaScript? Lors du traitement des données, nous rencontrons souvent la nécessité d'avoir le même ID ...

Comment réaliser des effets de défilement de parallaxe et d'animation des éléments, comme le site officiel de Shiseido?
ou:
Comment pouvons-nous réaliser l'effet d'animation accompagné d'un défilement de page comme le site officiel de Shiseido? Comment réaliser des effets de défilement de parallaxe et d'animation des éléments, comme le site officiel de Shiseido? ou: Comment pouvons-nous réaliser l'effet d'animation accompagné d'un défilement de page comme le site officiel de Shiseido? Apr 04, 2025 pm 05:36 PM

La discussion sur la réalisation des effets de défilement de parallaxe et d'animation des éléments dans cet article explorera comment réaliser le site officiel de Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ...

JavaScript est-il difficile à apprendre? JavaScript est-il difficile à apprendre? Apr 03, 2025 am 12:20 AM

Apprendre JavaScript n'est pas difficile, mais c'est difficile. 1) Comprendre les concepts de base tels que les variables, les types de données, les fonctions, etc. 2) Master la programmation asynchrone et les implémenter via des boucles d'événements. 3) Utilisez les opérations DOM et promettez de gérer les demandes asynchrones. 4) Évitez les erreurs courantes et utilisez des techniques de débogage. 5) Optimiser les performances et suivre les meilleures pratiques.

La différence dans Console.Log de sortie Résultat: Pourquoi les deux appels sont-ils différents? La différence dans Console.Log de sortie Résultat: Pourquoi les deux appels sont-ils différents? Apr 04, 2025 pm 05:12 PM

Discussion approfondie des causes profondes de la différence de sortie Console.log. Cet article analysera les différences dans les résultats de sortie de la fonction Console.log dans un morceau de code et expliquera les raisons derrière. � ...

Comment implémenter la fonction de glisser-déposer et de régler la fonction de réglage similaire à VScode dans le développement frontal? Comment implémenter la fonction de glisser-déposer et de régler la fonction de réglage similaire à VScode dans le développement frontal? Apr 04, 2025 pm 02:06 PM

Explorez la mise en œuvre de la fonction de glisser et de réglage du panneau de type VScode dans le frontal. Dans le développement frontal, comment implémenter un VScode comme ...

See all articles