Modèle de conception de l’adaptateur

Adaptateur, adaptateur, adaptateur ~ En fait, le motif de conception de l’adaptateur peut être considéré comme un simple programme/classe de conversion. En général, il utilisait deux interfaces ou classes incompatibles pour fonctionner ensemble. S’il vous plaît examiner ci-dessous l’image de modèle de conception d’adaptateur dessiner par moi, un peu moche :)

[.underline]##

Étude de cas

La société A a développé un programme en Java pour afficher tous les détails du produit dans la console. Ce programme Java est très simple. Il faut une collection Iterator et l’itère pour afficher le produit un à un.

Toutefois, la société A sous-traite le système d’arrière-plan des produits à un fournisseur appelé Fournisseur B. Le fournisseur B est sorti d’un système qui renvoie tous les produits sous forme de collecte d’énumération.

Arg …​ attendez …​ retournez le produit en tant que énumération? Mais le système actuel de la société A est conçu pour accepter le produit en tant qu’itérateur. La conception de la société A repose entièrement sur la collection Iterator, mais le fournisseur B fournit désormais une fonction ancienne et obsolète (énumération). Que devons-nous faire?

Les scénarios ci-dessus ressemblent à tout le monde, n’est-ce pas? Oui, cela m’est toujours arrivé aussi. Alors .. qui va le changer? Pour être franc, je peux garantir au vendeur B que 100% ne le changera pas pour vous.

Cependant, la société A ne peut pas non plus se permettre de la revoir, car elle a déjà beaucoup investi en temps et en ressources humaines.

Ici, l’adaptateur vient en place. Ce que nous devons faire, c’est créer une classe d’adaptateur capable de convertir Enumeration en Iterator. Comprendre? Étudiez le code ci-dessous peut avoir un sens pour vous.

[.underline]##

Étude de code

package com.mkyong.adapter;

import java.util.Enumeration;
import java.util.Vector;

public class EnumProduct
{
    private Vector product;

    public EnumProduct(){
        product = new Vector();
        setProduct("ProductA");
        setProduct("ProductB");
        setProduct("ProductC");
    }

    public void setProduct(String s){
         product.add(s);
    }

    public Enumeration getProduct(){
         Enumeration eProduct = product.elements();
         return eProduct;
    }
}
  • Voici le programme “Produit” de la société A qui permet d’afficher tous les produits sur l’écran de la console. **

package com.mkyong.adapter;

import java.util.Enumeration;
import java.util.Vector;
import java.util.Iterator;

public class Product
{
       //cant change here for some reason
    public void displayProduct(Iterator iterator){
         for (; iterator.hasNext();)
            System.out.println(iterator.next());
    }

     public static void main(String[]args) {
         Product product = new Product();
        //product.displayProduct();//display it
     }

}
  • Société Une fonction displayProduct (itérateur Iterator) utilise pour afficher toutes les informations sur les produits dans la console. La société A ne veut pas changer et insiste pour accepter Iterator en tant que paramètre. **

Dans cet exemple, Adapter Design Design peut le faire fonctionner sans aucune modification, y compris dans les classes actuelles du système et du fournisseur. Pour ce faire, la société A doit créer une classe Adapter pour convertir Enumeration en Iterator comme ci-dessous

package com.mkyong.adapter;

import java.util.Iterator;
import java.util.Enumeration;

public class EnumToIteratorAdapter implements Iterator
{
    Enumeration enumA;

    public EnumToIteratorAdapter(Enumeration e){
        enumA = e;
    }

    public boolean hasNext(){
        return enumA.hasMoreElements();
    }

    public Object next(){
        return enumA.nextElement();
    }

    public void remove(){
        throw new UnsupportedOperationException();
    }
}
  • Ok, maintenant revisitez la classe A de “Produit”, elle peut accepter l’énumération maintenant !!! **

package com.mkyong.adapter;

import java.util.Enumeration;
import java.util.Vector;
import java.util.Iterator;

public class Product
{
    public void displayProduct(Iterator iterator){
         for (; iterator.hasNext();)
            System.out.println(iterator.next());
    }

     public static void main(String[]args) {
         Product product = new Product();
         EnumProduct enumProduct = new EnumProduct();
         EnumToIteratorAdapter enumToIteratorAdapter = new EnumToIteratorAdapter(enumProduct.getProduct());
         product.displayProduct(enumToIteratorAdapter);
     }

}
  • Nous n’avons rien changé dans la classe de produit ou la classe EnumProduct. Nous venons de créer une nouvelle classe Adapter pour convertir Enumration en classe Iterator. Terminé.**

adapter design pattern lien://tag/java/[java]