Mode adaptateur Java
Récemment, j'ai appris les bases de Java et j'ai beaucoup de doutes lorsque j'apprenais des adaptateurs. J'ai recherché les informations en ligne et j'ai trouvé beaucoup d'informations sur l'adaptateur, mais cet article est bon. Voici un enregistrement, vous pouvez lire ce dont vous avez besoin.
Le modèle de l'adaptateur est de convertir l'interface d'une classe en une autre interface que le client attend, de sorte que deux classes dont les interfaces originales ne correspondent pas et ne peuvent pas fonctionner ensemble peuvent fonctionner ensemble. Fonctionnellement, les classes incompatibles avec ces interfaces ont généralement des fonctions identiques ou similaires. Habituellement, nous résolvons ce type d'incompatibilité d'interface en modifiant l'interface de cette classe, mais si nous ne voulons pas modifier l'interface d'origine pour une application, ou nous n'avons pas du tout le code source de l'objet, le mode adaptateur sera utile.
Avantages de l'adaptateur:
1. Découplez la classe cible et la classe d'adaptateur
2. Augmentez la transparence et la réutilisabilité de la classe, encapsulez l'implémentation spécifique dans la classe d'adaptateur, qui est transparente à la classe client et améliore la réutilisabilité de l'adaptateur.
3. À la fois la flexibilité et l'expansion sont très bonnes, et elles sont conformes au principe de l'ouverture et de la fermeture
Les rôles impliqués dans l'adaptateur comprennent les éléments suivants:
Target: définit l'interface spécifique utilisée par un client.
Client: Utilisez l'interface cible pour coopérer avec des objets cohérents avec l'interface cible.
Adaptee: une interface existante qui doit être adaptée.
Adaptateur: responsable de la conversion de l'interface d'Adaptee à l'interface de Target. Les adaptateurs sont une classe concrète, qui est le cœur de ce modèle.
Les adaptateurs sont divisés en deux types: adaptateur de classe et adaptateur d'objet, qui sera décrit en détail ci-dessous.
Adaptateur de classe
L'adaptateur soi-disant classe fait référence à l'adaptateur adaptateur héritant de notre adaptateur adaptateur et implémentant la cible d'interface cible. Comme il s'agit de l'héritage unique en Java, cet adaptateur ne peut servir que l'adaptateur hérité de l'adaptateur. Le code est le suivant:
Adaptation
package com.bluemsun.classAdapter; Public class Person {private int id; nom de chaîne privé; / ** * La personne ne peut parler que l'anglais maintenant * / public void sayEnglish () {System.out.println ("Personne peut dire l'anglais!"); } / ** * OMIT SETTER, Getter. * /}Interface cible (cible)
Package com.bluemsun.classadapter; / ** * La cible exige que cette personne puisse parler anglais, français et japonais. Mais maintenant, la personne ne peut parler que l'anglais * @Author Administrator * * / interface publique Target_person {void SaidEnglish (); void ditfrench (); void didjapanais ();}Adaptateur
package com.bluemsun.classadapter;/** * Class adapter, because it inherits Person, and Java can only inherit in single, so this adapter only serves the person class* This adapter allows the person class to implement the methods specified by the target interface without modifying the source code* @author Administrator * */public class Adapter_Person extends Person implements Target_Person{ @Override public void ditfrench () {System.out.println ("Personne peut dire français!"); } @Override public void sayjapanais () {System.out.println ("Personne peut dire japonais!"); }}Client
package com.bluemsun.classAdapter; Public Class Test {public static void main (String [] args) {cible_person personne = new adapter_person (); personne.sayenglish (); personne.sayfrench (); personne.sayjapanais (); }}Les quelques codes simples ci-dessus démontrent le rôle des adaptateurs de classe. Comme nous l'avons dit au début, cet adaptateur adaptateur ne peut servir que la classe de personne. Pour le moment, vous vous demandez peut-être, si j'ai besoin de m'adapter à de nombreuses classes, dois-je écrire un adaptateur pour chaque classe qui doit m'adapter? Y a-t-il un moyen plus flexible? La réponse est: oui! C'est l'adaptateur d'objet dont nous parlons ci-dessous.
Adaptateur d'objet
Le soi-disant adaptateur d'objet, tout simplement, signifie que l'adaptateur implémente notre interface cible, mais n'hérite pas les classes qui doivent être adaptées. Au lieu de cela, il est adapté en passant dans le constructeur de l'adaptateur. Le code est le suivant: (Target, adaptation comme ci-dessus)
Adaptateur
Package com.bluemsun.objectdapter; import com.bluemsun.classadapter.person; import com.bluemsun.classadapter.target_person; / ** * adaptateur d'objet, contrairement aux adaptateurs de classe, l'adaptateur d'objet peut adapter plusieurs sources de la cible * @Author Administrator * * / Public Class Adapter_Person Implances Implances @preon Interface personne privée; // Passez la classe de classe adaptée dans le constructeur public adapter_person (personne personne) {this.person = personne; } // implémenter sayEnglish () dans l'interface cible - appelez SayEnglish () dans adaptee @Override public void SayEnglish () {this.person.sayEnglish (); } // implémenter d'autres méthodes dans l'interface @Override public void SayFrench () {System.out.println ("Personne peut dire français!"); } @Override public void sayjapanais () {System.out.println ("Personne peut dire japonais!"); }}Client
package com.bluemsun.objectdapter; import com.bluemsun.classadapter.person; import com.bluemsun.classadapter.target_person; test de classe publique {public static void main (String [] args) {cible_person personne = new adapter_person (new-person ()); personne.sayenglish (); personne.sayfrench (); personne.sayjapanais (); }}Les adaptateurs d'objets peuvent s'adapter à plusieurs classes avec des adaptations. Il suffit de passer différentes classes avec des adaptations dans le constructeur de l'adaptateur. Flexibilité.
Avantages des adaptateurs de classe:
1. Étant donné que la classe d'adaptateur est une sous-classe de la classe d'adaptateur, certaines méthodes d'adaptateur peuvent être remplacées dans la classe d'adaptateur, ce qui rend l'adaptateur plus flexible.
Inconvénients des adaptateurs de classe:
1. Pour les langues telles que Java et C # qui ne prennent pas en charge l'héritage multiple, au plus une classe d'adaptateur peut être adaptée à au moins une classe d'adaptateur à la fois, et la classe abstraite cible ne peut être qu'une interface, pas une classe. Son utilisation a certaines limites. Il ne peut pas être adapté à une classe d'adaptateur et à sa sous-classe à l'interface cible en même temps.
Avantages des adaptateurs d'objets:
1. Adapter plusieurs adaptateurs différents à la même cible, c'est-à-dire que le même adaptateur peut adapter à la fois la classe d'adaptateur et sa sous-classe à l'interface cible.
Inconvénients des adaptateurs d'objets:
1. Comparé au mode adaptateur de classe, il n'est pas facile de remplacer la classe d'adaptateur.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!