Damien Flandrin

Tutoriels, astuces et conseils sur le développement web par un développeur web

Tutoriel - Qu'est-ce que le Design Pattern Adapter

il y a 3 mois · 1 MIN DE LECTURE
#Tutoriel  #Javascript  #Design Pattern 

Il s'agit d'un modèle structurel où l'interface d'une classe est traduite en une autre. Ce modèle permet aux classes de travailler ensemble, ce qui n'aurait pas été possible autrement en raison d'interfaces incompatibles.

Ce modèle est souvent utilisé pour créer des enveloppes pour de nouvelles API remaniées afin que d'anciennes API existantes puissent encore fonctionner avec elles. C'est généralement le cas lorsque de nouvelles implémentations ou un refactoring de code (pour des raisons telles que les gains de performance) aboutissent à une API publique différente alors que les autres parties du système utilisent toujours l'ancienne API et doivent donc être adaptées pour fonctionner ensemble.

Dans cet exemple, nous avons une ancienne API, à savoir la classe OldCalculator et une nouvelle API, à savoir la classe NewCalculator. La classe OldCalculator fournit une méthode d'opération pour l'addition et la soustraction tandis que la NewCalculator fournit des méthodes séparées pour l'addition et la soustraction. La classe Adaptateur CalcAdapter enveloppe le NewCalculator pour ajouter la méthode d'opération à l'API destinée au public tout en utilisant sa propre implémentation d'addition et de soustraction sous le capot.

// ancienne interface
class OldCalculator {
  constructor() {
    this.operations = function(term1, term2, operation) {
      switch (operation) {
        case 'add':
          return term1 + term2;
        case 'sub':
          return term1 - term2;
        default:
          return NaN;
      }
    };
  }
}

// nouvelle interface
class NewCalculator {
  constructor() {
    this.add = function(term1, term2) {
      return term1 + term2;
    };
    this.sub = function(term1, term2) {
      return term1 - term2;
    };
  }
}

// Adapter Class
class CalcAdapter {
  constructor() {
    const newCalc = new NewCalculator();

    this.operations = function(term1, term2, operation) {
      switch (operation) {
        case 'add':
          // en utilisant la nouvelle implémentation
          return newCalc.add(term1, term2);
        case 'sub':
          return newCalc.sub(term1, term2);
        default:
          return NaN;
      }
    };
  }
}

// usage
const oldCalc = new OldCalculator();
console.log(oldCalc.operations(10, 5, 'add')); // 15

const newCalc = new NewCalculator();
console.log(newCalc.add(10, 5)); // 15

const adaptedCalc = new CalcAdapter();
console.log(adaptedCalc.operations(10, 5, 'add')); // 15;

···

Damien Flandrin

Je suis développeur web pour l'agence Carredas, je fais principalement du PHP avec Laravel et Prestashop.
comments powered by Disqus


Développeur Web - Damien Flandrin