Maison >Java >javaDidacticiel >Comment implémenter le modèle d'adaptateur du modèle de conception Java
Le modèle d'adaptateur (Adapter) est défini comme suit : Convertissez l'interface d'une classe en une autre interface souhaitée par le client, afin que les classes qui ne peuvent pas fonctionner ensemble en raison d'interfaces incompatibles puissent fonctionner ensemble . Le modèle d'adaptateur est divisé en deux types : le modèle structurel de classe et le modèle structurel d'objet. Le premier a un degré de couplage entre les classes plus élevé que le second et nécessite que les programmeurs comprennent la structure interne des composants pertinents dans la bibliothèque de composants existante. est relativement rarement utilisé.
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 de réutiliser les classes d'adaptateur existantes.
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. Respectez le principe d'ouverture et de fermeture dans de nombreux scénarios commerciaux.
1. Le processus d'écriture de l'adaptateur doit être pleinement pris en compte en conjonction avec le scénario commercial, ce qui peut augmenter la complexité du système.
2. Cela augmente la difficulté de lecture du code et réduit la lisibilité du code. Une utilisation excessive d'adaptateurs rendra le code système compliqué.
Modèle d'adaptateur de classe : il peut être implémenté en utilisant l'héritage multiple. Par exemple, C++ peut définir une classe d'adaptateur pour hériter à la fois de l'interface métier du système actuel et des interfaces de composants qui existent déjà dans la bibliothèque de composants existante ; Java ne prend pas en charge l'héritage multiple. Cependant, vous pouvez définir une classe d'adaptateur pour implémenter l'interface métier du système actuel tout en héritant des composants qui existent déjà dans la bibliothèque de composants existante.
Modèle d'adaptateur d'objet : vous pouvez introduire des composants qui ont été implémentés dans la bibliothèque de composants existante dans la classe d'adaptateur, qui implémente également l'interface métier du système actuel. Présentons maintenant leur structure de base.
Cas : Hongmao utilise des cristaux de feu pour activer le Fire Dance Whirlwind Sword Qi
Interface cible : Changhong Sword Qi
Classe d'adapté : Fire Dance Whirlwind Sword Qi
Adaptateur (Adaptateur) Catégorie : Fire Crystal
Hongmao ne peut actuellement activer que le Changhong Sword Qi, mais s'il souhaite activer le Fire Dance Whirlwind Sword Qi
, il ne peut utiliser que le pouvoir du cristal de feu pour transformer le Changhong Sword Qi en Fire Dance Whirlwind Sword Qi
Remarque : ce que je suis ici, c'est adapter le Fire Dance Whirlwind Sword Qi à l'adaptateur de classe Changhong Sword Qi
déclare une interface pour le Changhong Sword Qi, y compris une méthode abstraite pour activer le Changhong Sword Qi.
public interface Chang { void chang(); }
La catégorie Fire Dance Whirlwind Sword Qi, déclare une méthode pour activer le Fire Dance Whirlwind Sword Qi.
public class Huo { public void huo() { System.out.println("火舞旋风剑气"); } }
La classe Fire Crystal hérite de la classe Fire Dance Whirlwind Sword Qi (Objectif : après l'héritage, vous pouvez utiliser les méthodes de la classe) et implémente l'interface Changhong Sword Qi (Objectif : réaliser l'activation de Méthode Changhong Sword Qi). Parmi les méthodes d'activation du Changhong Sword Qi, la méthode d'activation du Fire Dance Whirlwind Sword Qi est utilisée.
public class JingShi extends Huo implements Chang { @Override public void chang() { huo(); } }
public class Demo { public static void main(String[] args) { Chang haha = new JingShi(); haha.chang(); } }
declares une interface de Changhong jianqi, y compris une méthode abstraite pour activer le changhong jianqi
rreeepublic interface Chang { void chang(); }
Fire Crystal
public class Huo { public void huo() { System.out.println("火舞旋风剑气"); } }
Test
public class JingShi implements Chang { private Huo huo; JingShi() { } JingShi(Huo huo) { this.huo = huo; } @Override public void chang() { huo.huo(); } }
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!