En fait, tout le monde devrait connaître le mot adaptateur. Nous savons que l'iPhone d'Apple ne fournit plus de prise de charge. Il n'y a qu'un seul câble de données dans la boîte, nous ne pouvons donc pas utiliser ce câble de données seul pour le brancher en 220V. Il se charge sur la carte, nous devons donc acheter un adaptateur pour connecter la carte au téléphone portable. C'est l'adaptateur.
En fait, il peut également arriver dans la conception de logiciels que les composants avec certaines fonctions métier qui doivent être développées existent déjà dans la bibliothèque de composants existante, mais qu'ils soient incompatibles avec les spécifications d'interface du système actuel si ces composants sont refaits. -développé, le coût sera très élevé, alors l'utilisation du mode adaptateur peut bien résoudre ces problèmes.
Modèle d'adaptateur : 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, donc l'application est relativement moindre.
Avantages :
Le client peut appeler de manière transparente l'interface cible via l'adaptateur
Réutilise les classes existantes, les programmeurs n'ont pas besoin de modifier le code d'origine et de réutiliser les classes existantes. classes La classe adaptateur
découple la classe cible et la classe adaptateur, résolvant ainsi le problème des interfaces incohérentes entre la classe cible et la classe adaptateur
Elle est conforme au principe d'ouverture et de fermeture dans de nombreux scénarios commerciaux
Inconvénients :
Le processus d'écriture de l'adaptateur doit être pleinement pris en compte en fonction du scénario commercial, ce qui peut augmenter la complexité du système
augmente la difficulté de lecture du code et réduit la lisibilité du code. rendre le code système désordonné
(La structure suivante est référencée sur Internet)
La structure du modèle :
Interface Target (Target) : L'interface interface attendue par l'activité système actuelle, il peut s'agir d'une classe abstraite ou d'une classe Interface
Classe Adaptee : C'est l'interface de composant dans la bibliothèque de composants existante qui est accessible et adaptée
Classe Adapter : C'est un convertisseur qui s'adapte par héritage ou référence Objet de l'adaptateur, convertit l'interface de l'adaptateur en interface cible, permettant aux clients d'accéder à l'adaptateur au format de l'interface cible
La structure du modèle d'adaptateur de classe :
Le structure du modèle d'adaptateur d'objet :
A Utilisez une méthode de combinaison pour implémenter l'adaptateur :
Nous avons maintenant une prise d'ordinateur portable triphasée, mais nous devons maintenant l'utiliser. une prise biphasée pour le chargement, nous devons donc Cette prise est équipée d'un adaptateur biphasé :
Interface de prise triphasée :
/** * 三相插座接口 */ public interface ThreePlugIf { //使用三相电流供电 public void powerWithThree(); }
Prise biphasée standard nationale :
/** * 国标的二相插座 */ public class GBTowPlug { public void powerWithTwo(){ System.out.println("使用二相电流供电"); } }
Ordinateur portable :
/** * 笔记本 */ public class NoteBook { private ThreePlugIf plug; public NoteBook(ThreePlugIf plug){ this.plug = plug; } //使用插座充电 public void charge(){ plug.powerWithThree(); } }
Adaptateur de prise triphasée à biphasée :
/** * 三相转二相的插座适配器 */ public class TwoPlugAdapter implements ThreePlugIf { private GBTowPlug plug; public TwoPlugAdapter(GBTowPlug plug) { this.plug = plug; } @Override public void powerWithThree() { System.out.println("通过转换"); plug.powerWithTwo(); } }
Classe de test :
public class Test { public static void main(String[] args) { GBTowPlug two = new GBTowPlug(); ThreePlugIf three = new TwoPlugAdapter(two); NoteBook nb = new NoteBook(three); nb.charge(); } }
Résultat de sortie :
L'adaptateur utilisant la méthode de combinaison est appelé adaptateur d'objet Caractéristiques : Combinez "l'adapté" en tant qu'objet dans l'adaptateur Dans la classe, modifiez l'interface cible et emballez-la dans l'adaptateur B Utilisez l'héritage pour implémenter l'adaptateur : Héritez l'adaptateur. :Utilisation d'une alimentation en courant biphasé par conversion
/** * 采用继承方式的插座适配器 */ public class TwoPlugAdapterExtends extends GBTowPlug implements ThreePlugIf{ @Override public void powerWithThree() { System.out.println("借助继承适配器"); this.powerWithTwo(); } }
public class Test { public static void main(String[] args) { GBTowPlug two = new GBTowPlug(); ThreePlugIf three = new TwoPlugAdapter(two); NoteBook nb = new NoteBook(three); nb.charge(); //使用继承方法 three = new TwoPlugAdapterExtends(); nb = new NoteBook(three); nb.charge(); } }
Par conversionLa méthode d'héritage est appelée une classe adaptateurCaractéristiques :Grâce à l'héritage multiple d'interfaces incompatibles, la correspondance de l'interface cible est obtenue, et une seule est une certaine classe est utilisée pour implémenter l'adaptation6. Le système développé précédemment a des classes qui répondent aux exigences fonctionnelles du nouveau système, mais son interface n'est pas cohérente avec l'interface du nouveau systèmeUtiliser une alimentation à courant biphasé
À l'aide d'un adaptateur d'héritageUtiliser une alimentation à courant biphasé
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!