Modèles de conception --- modèle d'adaptateur

1. Introduction

Dans la vraie vie, il arrive souvent que deux objets ne puissent pas interagir directement et qu'un objet tiers soit nécessaire pour l'adaptation.Par exemple, un téléphone portable et une carte SIM ont besoin d'un tiroir à carte, afin de réaliser la lecture de la carte SIM. Un autre exemple est un chargeur de téléphone portable, qui convertit une tension alternative de 220 V en une tension continue de 5 V, fournissant ainsi une alimentation de charge pour les téléphones portables. Cette situation se produit également dans la conception de logiciels et nous pouvons utiliser le modèle d'adaptateur pour résoudre le problème.

2 Définitions 

Convertissez l'interface d'une classe en une autre interface souhaitée par le client, afin que les deux classes initialement incompatibles en raison de l'interface puissent fonctionner ensemble.

3 Structure et mise en œuvre

Le modèle d'adaptateur comprend principalement les trois rôles principaux suivants :

1. Cible : l'interface que le système actuel peut appliquer directement, qui peut être une interface ou une classe abstraite.

2. Adaptee : Une classe à laquelle le système veut accéder mais ne peut pas accéder directement.

3. Adaptateur : un convertisseur qui convertit l'interface de l'adaptateur en une interface cible en héritant ou en référençant l'objet de l'adaptateur, permettant aux clients d'accéder à l'adaptateur au format de l'interface cible.

L'image ci-dessous provient de la citation 2

4 Avantages et inconvénients

4.1 Avantages

1. Le client peut appeler de manière transparente l'interface cible via l'adaptateur.

2. Les classes existantes sont réutilisées.Les programmeurs n'ont pas besoin de modifier le code d'origine et n'ont qu'à ajouter du code pour réutiliser la classe d'adaptateur existante.

3. Découplez la classe cible et la classe adaptateur pour résoudre le problème des interfaces incohérentes entre la classe cible et la classe adaptateur.

4.2 Inconvénients

Le modèle d'adaptateur lui-même est un inconvénient et ne doit être utilisé qu'en dernier recours. Le processus d'écriture de l'adaptateur doit être pris en compte de manière approfondie en combinaison avec des scénarios commerciaux, ce qui peut augmenter la complexité du système. Augmentez la difficulté de lecture du code, réduisez la lisibilité du code et l'utilisation excessive d'adaptateurs rendra le code système désordonné.

5 exemples de codes

Pour un exemple d'adaptateur secteur, l'adaptateur secteur produit une tension alternative de 220 V, qui est convertie en tension continue de 5 V via l'adaptateur secteur pour charger le téléphone mobile.

5.1 Classe de tension

@Data
@Builder
public class Voltage {

    /**
     * 电压类型 交流(AC) 直流(DC)
     */
    private String type;
    /**
     * 电压值
     */
    private int value;
}

5.2 Panneau de brassage

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-10-13 11:07
 * @desc: 插线板,设计好以后不允许修改
 **/
public final class PatchBoard {

    public Voltage giveVoltage(){
        return Voltage.builder()
                .type("AC")
                .value(220)
                .build();
    }
}

5.3 Classe cible Cible

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-10-13 11:15
 **/
public interface Target {

    /**
     * 充电
     * @return 5v 直流电
     */
    Voltage charge();
}

5.4 Adaptateur secteur Adaptateur secteur

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-10-13 11:15
 * @desc 充电器
 **/
public class PowerAdapter implements Target{

    private PatchBoard patchBoard;

    public PowerAdapter(PatchBoard patchBoard){
        this.patchBoard = patchBoard;
    }

    @Override
    public Voltage charge() {
        Voltage voltage = patchBoard.giveVoltage();
        //电压转换
        voltage.setType("DC");
        voltage.setValue(5);
        return voltage;
    }
}

5.5 Fonction principale MainClass

/**
 * @program: design-pattern-learning
 * @author: zgr
 * @create: 2021-10-13 11:05
 **/
public class MainClass {

    public static void main(String[] args) {
        //想要给手机充电
        //1.找到插线板
        PatchBoard patchBoard = new PatchBoard();
        Voltage voltageAc = patchBoard.giveVoltage();
        System.out.println("插板给电:" + voltageAc);
        //2.拿出电源适配器
        Target target = new PowerAdapter(patchBoard);
        //3.充电
        Voltage voltageDc = target.charge();
        System.out.println("适配器给电:" + voltageDc);

    }
}

5.6 Résultats en cours d'exécution

5.7 Résumé

 Notre objectif est de charger, la tension fournie par la carte enfichable ne peut pas être utilisée et l'adaptateur est utilisé pour la conversion afin de répondre aux besoins de la tension de charge.

6 Citations

1. "Modèles de conception Dahua"

2. Explication détaillée du mode adaptateur (mode adaptateur)

7Code source

design-pattern-learning/src/com/hz/design/pattern/adapter at main · airhonor/design-pattern-learning · GitHub

Je suppose que tu aimes

Origine blog.csdn.net/honor_zhang/article/details/120738884
conseillé
Classement