


Modèle d'adaptateur d'analyse de modèle de conception Java (exemple détaillé)
Cet article vous apporte des connaissances pertinentes sur java, qui introduit principalement les problèmes liés aux modèles de conception, et parle principalement du modèle d'adaptateur. Le modèle d'adaptateur est principalement utilisé pour convertir l'interface d'une classe en ce que le client veut. le format de classe permet aux classes initialement incompatibles de fonctionner ensemble et découple les classes cibles et les classes adaptateurs. J'espère que cela sera utile à tout le monde.
Apprentissage recommandé : "tutoriel vidéo Java"
1. Quel est le modèle d'adaptateur :
Le modèle d'adaptateur est principalement utilisé pour convertir l'interface d'une classe dans le format de classe cible souhaité par le client , de sorte qu'il n'est pas compatible à l'origine. Les classes peuvent fonctionner ensemble pour découpler la classe cible et la classe adaptateur en même temps, il est également conforme au « principe d'ouverture et de fermeture », et de nouvelles classes d'adaptateur peuvent être ajoutées sans modifier le code d'origine ; ; l'implémentation spécifique est encapsulée dans la classe adapter. Dans la classe adapter, elle est transparente pour la classe client et améliore la réutilisation de l'adaptateur,Mais l'inconvénient est que le processus d'implémentation de remplacement de l'adaptateur est relativement compliqué.
Par conséquent, le modèle d'adaptateur est plus adapté aux scénarios suivants :
- (1) Le système doit utiliser des classes existantes et les interfaces de ces classes ne sont pas conformes aux interfaces du système.
- (2) Lors de l'utilisation de composants tiers, la définition de l'interface du composant est différente de votre propre définition. Vous ne souhaitez pas modifier votre propre interface, mais vous devez utiliser les fonctions de l'interface du composant tiers.
Les deux exemples très frappants suivants illustrent bien ce qu'est le modèle d'adaptateur :
2. Trois façons d'implémenter le modèle d'adaptateur :
Le modèle d'adaptateur est principalement divisé en trois catégories : les adaptateurs de classe Les modèles , modèles d'adaptateur pour les objets, modèles d'adaptateur pour les interfaces.
1. Modèle d'adaptateur de classe :
- 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) : La classe à adapter ou la classe adaptatrice.
- Adaptateur : convertissez l'interface d'origine en interface cible en emballant un objet qui doit être adapté.
// 已存在的、具有特殊功能、但不符合我们既有的标准接口的类 class Adaptee { public void specificRequest() { System.out.println("被适配类具有 特殊功能..."); } } // 目标接口,或称为标准接口 interface Target { public void request(); } // 具体目标类,只提供普通功能 class ConcreteTarget implements Target { public void request() { System.out.println("普通类 具有 普通功能..."); } } // 适配器类,继承了被适配类,同时实现标准接口 class Adapter extends Adaptee implements Target{ public void request() { super.specificRequest(); } } // 测试类public class Client { public static void main(String[] args) { // 使用普通功能类 Target concreteTarget = new ConcreteTarget(); concreteTarget.request(); // 使用特殊功能类,即适配类 Target adapter = new Adapter(); adapter.request(); } }
Résultats d'exécution :
普通类 具有 普通功能... 被适配类具有 特殊功能...
2. Mode adaptateur d'objet :
// 适配器类,直接关联被适配类,同时实现标准接口 class Adapter implements Target{ // 直接关联被适配类 private Adaptee adaptee; // 可以通过构造函数传入具体需要适配的被适配类对象 public Adapter (Adaptee adaptee) { this.adaptee = adaptee; } public void request() { // 这里是使用委托的方式完成特殊功能 this.adaptee.specificRequest(); } } // 测试类 public class Client { public static void main(String[] args) { // 使用普通功能类 Target concreteTarget = new ConcreteTarget(); concreteTarget.request(); // 使用特殊功能类,即适配类, // 需要先创建一个被适配类的对象作为参数 Target adapter = new Adapter(new Adaptee()); adapter.request(); } }
Les résultats du test sont cohérents avec ce qui précède. D'après le diagramme de classes, nous savons également que tout ce qui doit être modifié est la structure interne de la classe Adapter, c'est-à-dire que l'Adaptateur lui-même doit d'abord avoir un objet de la classe adaptée, puis déléguer des fonctions spéciales spécifiques à cet objet pour mise en œuvre. 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.
3. Modèle d'adaptateur d'interface :
Parfois, il y a plusieurs méthodes abstraites dans une interface que nous écrivons. Lorsque nous écrivons la classe d'implémentation de l'interface, nous devons implémenter toutes les méthodes de l'interface, ce qui est évidemment parfois du gaspillage. . Parce que toutes les méthodes ne sont pas ce dont nous avons besoin, parfois seules certaines sont nécessaires. Afin de résoudre ce problème, nous introduisons le modèle d'adaptateur de l'interface, à l'aide d'une classe abstraite, qui implémente l'interface et implémente toutes les méthodes. et nous ne nous occupons pas de l'interface d'origine, nous entrons uniquement en contact avec la classe abstraite, nous écrivons donc une classe, héritons de la classe abstraite et réécrivons les méthodes dont nous avons besoin. Jetez un œil au diagramme de classes :
C'est facile à comprendre. Dans le développement réel, nous rencontrons souvent trop de méthodes définies dans cette interface, de sorte que parfois nous n'en avons pas toutes besoin dans certaines classes d'implémentation. Regardez le code :
public interface Sourceable { public void method1(); public void method2(); }
Classe abstraite Wrapper2 :
public abstract class Wrapper2 implements Sourceable{ public void method1(){} public void method2(){} } public class SourceSub1 extends Wrapper2 { public void method1(){ System.out.println("the sourceable interface's first Sub1!"); } } public class SourceSub2 extends Wrapper2 { public void method1(){ System.out.println("the sourceable interface's second Sub2!"); } }
public class WrapperTest { public static void main(String[] args) { Sourceable source1 = new SourceSub1(); Sourceable source2 = new SourceSub2(); source1.method1(); source1.method2(); source2.method1(); source2.method2(); } }
Résultats d'exécution :
the sourceable interface's first Sub1! the sourceable interface's second Sub2!
Apprentissage recommandé : "Tutoriel vidéo Java"
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

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.

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.

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.

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.

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.

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

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.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4
