définition
Le mode adaptateur (adaptateur) consiste à convertir une interface (méthode ou attribut) d'une classe (objet) en une autre interface (méthode ou attribut) que le client souhaite. Le mode adaptateur permet aux classes (objets) qui n'ont pas pu travailler ensemble en raison de l'incompatibilité de l'interface. Emballage rapide.
L'alias de l'adaptateur est un emballage, qui est un motif relativement simple. Il existe de nombreux scénarios de ce type dans le développement de programmes: lorsque nous essayons d'appeler une interface d'un module ou d'un objet, nous constatons que le format de cette interface ne répond pas aux exigences actuelles. Il y a deux solutions en ce moment. La première consiste à modifier l'implémentation de l'interface d'origine, mais si le module d'origine est très compliqué, ou si le module que nous obtenons est un code compressé écrit par quelqu'un d'autre, la modification de l'interface d'origine ne sera pas réaliste. La deuxième méthode consiste à créer un adaptateur et à convertir l'interface d'origine en une autre interface souhaitée par le client. Le client n'a qu'à traiter l'adaptateur.
Pourquoi avez-vous besoin d'utiliser le mode adaptateur?
Lorsque vous développez une application, vous devez souvent en remplacer une partie, par exemple, une bibliothèque que vous utilisez pour contenir des journaux ou un contenu similaire. Lorsque vous le remplacez par une nouvelle bibliothèque, il est peu probable que la nouvelle bibliothèque ait exactement la même interface. De là, vous avez deux options:
(1) Vérifiez tout le code et modifiez tout le code pointant vers l'ancienne bibliothèque.
(2) Créez un adaptateur afin que la nouvelle bibliothèque puisse utiliser la même interface que l'ancienne bibliothèque.
De toute évidence, dans certains cas, si votre application est petite ou qu'il y a peu de références à l'ancienne bibliothèque, il est plus approprié de vérifier le code complet et de le modifier pour correspondre à la nouvelle bibliothèque au lieu d'ajouter une nouvelle couche d'abstraction pour rendre le code plus compliqué. Cependant, dans la plupart des cas, la création d'un adaptateur est plus pratique et économe en temps.
Exemples de code javascript
Quand quelque chose peut arriver, cela se produira certainement. Jetons d'abord un coup d'œil à ce petit loggerfactory, ce qui nous permet de modifier l'interface de journal que nous utilisons plus facilement.
var loggerfactory = {getLogger: function () {return window.console; }, ...}; / * Exemple d'utilisation * / var logger = loggerfactory.getLogger (); logger.log ("quelque chose à log");Lorsque nous appelons GetLogger, il nous renvoie l'objet Console (console). Pour cet exercice, nous prétendons que l'objet Console n'a qu'une seule méthode - log, et il ne peut recevoir qu'un seul paramètre de type de chaîne. Ensuite, nous avons une autre interface de journal, qui sera plus compliquée car 1) elle est implémentée dans JavaScript, contrairement à la console, qui n'est pas le navigateur lui-même; 2) Il enverra les journaux au serveur via AJAX, ce qui signifie également que nous devons coder les données de l'URL (le code n'implémentera pas spécifiquement les questions liées à l'encodage de l'URL, car cela n'a rien à voir avec le modèle d'adaptateur dont nous voulons parler). Bien sûr, il utilisera une interface différente de la console.
var ajaxlogger = {sendLog: function () {var data = this.urlencode (arguments); jQuery.ajax ({url: "http://example.com/log", data: data}); }, urlencode: function (arg) {... return encodedData; }, ...};Nous avons utilisé les demandes AJAX de JQuery, principalement pour gagner du temps et ignorer les choses que nous ne voulons pas faire avec le mode adaptateur. Ce que nous devons faire maintenant, c'est créer un adaptateur et modifier le précédent LoggerFactory pour retourner cet adaptateur au lieu de l'objet Console.
var ajaxloggeradapter = {log: function (arg) {ajaxlogger.sendlog (arg); }}? }, ...};Nous n'avons apporté qu'une seule ligne de modifications au code existant, et l'ensemble du programme peut utiliser cette nouvelle interface de journal.
Adaptateur complexe
L'interface de journal est un exemple très simple. Il n'a qu'une seule méthode, et il n'est pas difficile de le cartographier directement à l'ancienne méthode. Ce n'est pas le cas dans la plupart des cas. Vous pouvez rencontrer le problème selon lequel les paramètres de ces fonctions mappés sont complètement différents, et l'ancienne interface peut ne pas avoir ces paramètres du tout, et vous devez les traiter vous-même. Dans certains cas, vous devez supprimer certains paramètres car les nouvelles interfaces ne les utilisent pas du tout. Si la cartographie de l'interface entre deux objets est trop difficile, nous devons penser à d'autres façons, de toute façon, je ne veux pas trouver et modifier des milliers de lignes d'ancien code.