Maison Java javaDidacticiel Illustration du modèle d'adaptateur dans les modèles de conception Java

Illustration du modèle d'adaptateur dans les modèles de conception Java

Oct 18, 2017 am 09:36 AM
java 设计模式 适配器

Cet article présente principalement en détail les notes du modèle d'adaptateur du modèle de conception Java, qui ont une certaine valeur de référence. Les amis intéressés peuvent se référer au

Modèle d'adaptateur :

Le modèle d'adaptateur transforme l'interface d'une classe en une autre interface attendue par le client, permettant ainsi à deux classes qui étaient initialement incapables de travailler ensemble en raison d'interfaces incompatibles de travailler ensemble.

Scènes de la vie :

1. Adaptateur secteur pour ordinateur portable, qui peut convertir 220 V en une tension adaptée à une utilisation sur ordinateur portable.

2. Insérez le clavier de l'interface PS/2 du bureau dans l'interface USB de l'ordinateur portable. Vous avez besoin d'un adaptateur d'interface USB et PS/2. agit comme un adaptateur.

Illustration du modèle dadaptateur dans les modèles de conception Java

Diagramme de classes général :

Illustration du modèle dadaptateur dans les modèles de conception Java

Dans le diagramme de classes général ci-dessus, la classe Cient Ce à quoi nous nous retrouvons confrontés est l'interface Target (ou classe abstraite), qui ne peut utiliser que des sous-classes qui répondent à cette norme cible ; et la classe Adaptee est l'objet adapté (également appelé rôle source) car il contient des opérations, des fonctions, des fonctions spécifiques ; etc., nous voulons donc l'utiliser dans notre propre système et le convertir en une classe qui répond à nos normes, afin que la classe Client puisse choisir d'utiliser la classe ConcreteTarget ou la classe Adaptee avec des fonctions spéciales de manière transparente.

Rôle dans le modèle d'adaptateur :

Interface cible (Target) : l'interface attendue par les clients. La cible peut être une classe concrète ou abstraite, ou une interface.

Classe à adapter (Adaptee) : classe d'interface ou d'adaptation à adapter.
Adaptateur : la classe adaptateur est le cœur de ce modèle. L'adaptateur convertit l'interface source en interface cible en encapsulant un objet qui doit être adapté. Bien évidemment, ce rôle ne peut pas être une interface, mais doit être une classe concrète.

La structure du modèle d'adaptateur :

Le modèle d'adaptateur a deux formes différentes : le modèle d'adaptateur de classe et le modèle d'adaptateur d'objet.

Le modèle d'adaptateur d'une classe convertit l'API de la classe adaptatrice en API de la classe cible.

Le modèle d'adaptateur d'objet est le même que le modèle d'adaptateur d'objet. Le modèle d'adaptateur d'objet convertit l'API de la classe adaptée en API de la classe cible, le modèle d'adaptateur d'objet ne l'est pas. Utilisez une relation d'héritage pour vous connecter à la classe Adaptee, mais utilisez une relation de délégation pour vous connecter à la classe Adaptee.

Modèle d'adaptateur de classe

1. Créez une classe adaptée :


/**
 * 被适配的类
 * 已存在的、具有特殊功能、但不符合我们既有的标准接口的类
 * (相当于例子中的,PS/2键盘)
 * @author ChuanChen
 * 
 */
public class Adaptee {

  public void specificRequest(){
    System.out.println("可以完成客户请求的需要的功能!");
  }
}
Copier après la connexion
Copier après la connexion
2. Créez une classe adaptée. interface cible qui peut gérer certaines requêtes spéciales


/**
 * 目标接口,或称为标准接口
 * @author ChuanChen
 *
 */
public interface Target {
  void handleReq();
}
Copier après la connexion
Copier après la connexion
3. Créer un adaptateur (méthode d'adaptateur de classe)


/**
 * 适配器 (类适配器方式)
 * (相当于usb和ps/2的转接器)
 * @author ChuanChen
 *
 */
public class Adapter extends Adaptee implements Target {


  @Override
  public void handleReq() {
    super.specificRequest();
  }
}
Copier après la connexion
4. Créer un client


/**
 * 客户端类
 * (相当于例子中的笔记本,只有USB接口)
 * @author ChuanChen
 *
 */
public class Client {

  public void test(Target t){
    t.handleReq();
  }

  public static void main(String[] args) {
    Client c = new Client();
    Adaptee a = new Adaptee();
    Target t = new Adapter();
    c.test(t); 
  }  
}
Copier après la connexion
L'adaptateur implémenté ci-dessus est appelé un adaptateur de classe, car la classe Adapter hérite d'Adaptee (classe adaptée), et également implémente l'interface Target (car Java ne prend pas en charge l'héritage multiple, il est donc implémenté de cette manière). Dans la classe Client, nous pouvons choisir et créer n'importe quelle sous-classe qui répond aux besoins pour implémenter des fonctions spécifiques.

Modèle d'adaptateur d'objets

1. Créer une classe adaptée :


/**
 * 被适配的类
 * 已存在的、具有特殊功能、但不符合我们既有的标准接口的类
 * (相当于例子中的,PS/2键盘)
 * @author ChuanChen
 * 
 */
public class Adaptee {

  public void specificRequest(){
    System.out.println("可以完成客户请求的需要的功能!");
  }
}
Copier après la connexion
Copier après la connexion
2. Créer une interface cible, peut gérer quelques demandes spéciales


/**
 * 目标接口,或称为标准接口
 * @author ChuanChen
 *
 */
public interface Target {
  void handleReq();
}
Copier après la connexion
Copier après la connexion
3. Créer un adaptateur (méthode d'adaptateur d'objet, en utilisant une méthode de combinaison pour intégrer l'objet adapté)


/**
 * 适配器 (对象适配器方式,使用了组合的方式跟被适配对象整合)
 * (相当于usb和ps/2的转接器)
 * @author ChuanChen
 *
 */

public class Adapter implements Target{

private Adaptee adaptee;

  @Override
  public void handleReq() {
    adaptee.specificRequest();
  }

  public Adapter(Adaptee adaptee) {
    super();
    this.adaptee = adaptee;
  }

}
Copier après la connexion
4. Créer un client


/**
 * 客户端类
 * (相当于例子中的笔记本,只有USB接口)
 * @author ChuanChen
 *
 */
public class Client {

  public void test(Target t){
    t.handleReq();
  }

  public static void main(String[] args) {
    Client c = new Client();
    Adaptee a = new Adaptee();
    Target t = new Adapter(a);
    c.test(t);
  }  
}
Copier après la connexion
Il suffit de modifier la structure interne de la classe Adapter, c'est-à-dire Adapter Il doit d'abord posséder un objet de la classe adaptée, puis déléguer des fonctions spéciales spécifiques à cet objet à implémenter. En utilisant le mode adaptateur d'objet, la classe Adapter (classe d'adaptation) peut s'adapter à plusieurs classes adaptées différentes en fonction de l'objet Adaptee entrant. Bien sûr, à ce stade, nous pouvons extraire une interface pour plusieurs classes adaptées ou classes abstraites. Il semble que le modèle d'adaptateur d'objet soit plus flexible.

Compromis entre l'adaptateur de classe et l'adaptateur d'objet :

  • L'adaptateur de classe utilise l'héritage d'objet, qui est une méthode de définition statique tandis que l'adaptateur d'objet ; utilise La façon dont les objets sont combinés est une combinaison dynamique.

  • Pour les adaptateurs de classe, puisque l'adaptateur hérite directement d'Adaptee, l'adaptateur ne peut pas fonctionner avec les sous-classes d'Adaptee, car l'héritage est une relation statique. Lorsque l'adaptateur hérite d'Adaptee, ce ne sera peut-être pas le cas. Je traiterai à nouveau des sous-classes d'Adaptee.

  • Pour les adaptateurs d'objets, un adaptateur peut adapter plusieurs sources différentes à la même cible. En d’autres termes, le même adaptateur peut adapter à la fois la classe source et ses sous-classes à l’interface cible. Étant donné que l'adaptateur d'objet utilise la relation de combinaison d'objets, tant que le type d'objet est correct, peu importe qu'il s'agisse d'une sous-classe ou non.

  • Pour les adaptateurs de classe, l'adaptateur peut redéfinir une partie du comportement d'Adaptee, ce qui équivaut à la sous-classe remplaçant certaines méthodes d'implémentation de la classe parent.

  • Pour les adaptateurs d'objets, il est difficile de redéfinir le comportement d'Adaptee. Dans ce cas, vous devez définir une sous-classe d'Adaptee pour implémenter la redéfinition, puis laisser l'adaptateur combiner les. sous-classes. Bien qu'il soit difficile de redéfinir le comportement d'Adaptee, il est très pratique d'ajouter de nouveaux comportements, et les comportements nouvellement ajoutés peuvent être appliqués à toutes les sources en même temps.

  • Pour les adaptateurs de classe, un seul objet est introduit, et aucune référence supplémentaire n'est nécessaire pour obtenir indirectement l'Adaptee.

  • Pour les adaptateurs d'objets, des références supplémentaires sont nécessaires pour obtenir indirectement l'Adaptee.

Il est recommandé d'utiliser autant que possible l'implémentation de l'adaptateur d'objet, en utilisant plus de composition/agrégation et moins d'héritage. Bien entendu, les problèmes spécifiques doivent être analysés en détail et la méthode de mise en œuvre doit être sélectionnée en fonction des besoins.

Avantages du patron d'adaptateur :

Meilleure réutilisabilité :

Le système doit utiliser des classes existantes et l'interface de cette classe ne répond pas aux besoins du système. Ensuite, ces fonctions peuvent être mieux réutilisées via le mode adaptateur.

Meilleure évolutivité :

Lors de la mise en œuvre de la fonction d'adaptateur, vous pouvez appeler les fonctions que vous avez développées, cela s'étend naturellement la fonctionnalité du système.
Inconvénients du mode adaptateur

Une utilisation excessive d'adaptateurs rendra le système très compliqué et difficile à comprendre dans son ensemble. Par exemple, il est évident que l'interface A est appelée, mais en fait elle est adaptée en interne pour implémenter l'interface B. Si cela se produit trop souvent dans un système, cela équivaudra à un désastre. Par conséquent, si cela n’est pas nécessaire, vous pouvez reconstruire le système directement sans utiliser l’adaptateur.

Scénarios de mode adaptateur au travail :

1. L'interface de la classe existante ne répond pas à nos besoins
2. Créer une classe réutilisable donc ; que la classe peut fonctionner avec d'autres classes non liées ou imprévues (c'est-à-dire des classes dont les interfaces ne sont pas nécessairement compatibles)
3. Sans sous-classer chacune pour correspondre à leur Dans le cas des interfaces, utilisez une sous-classe existante.

Le mode adaptateur est souvent utilisé pour la mise à niveau et la mise à niveau d'anciens systèmes. Si notre système n’a jamais besoin de maintenance après le développement, alors de nombreux modèles sont inutiles. Mais malheureusement, en réalité, le coût de maintenance d’un système est souvent plusieurs fois supérieur à celui de son développement.

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles