Mode adaptateur
La définition d'un motif d'adaptateur (anglais: modèle adaptateur) est parfois appelée style ou emballage d'emballage. Transférer une interface d'une classe à ce que l'utilisateur attend. Une adaptation fait des classes qui ne peuvent pas fonctionner ensemble en raison de l'incompatibilité de l'interface.
Il existe deux types de modes d'adaptateur:
1. Mode de l'adaptateur d'objet - L'adaptateur d'objet répond à l'interface d'attente de l'utilisateur via l'association et réduit également le mauvais couplage entre les codes. Il est recommandé d'utiliser "l'adaptation des objets" dans votre travail.
2. Mode adaptateur de classe - Dans ce mode adaptateur, l'adaptateur hérite de ses classes implémentées (généralement l'héritage multiple). Il n'y a pas d'héritage multiple en Java, donc je ne le présenterai pas ici.
accomplir
1. Target - définit la méthode que le client doit utiliser.
2. Adaptateur - Hériter ou implémenter la cible et s'adapter aux méthodes adaptées à la cible.
3. Adaptee - Définissez une méthode existante.
4. Client - Méthodes d'appel dans la cible.
classe publique adaptee {public void SpecificRequest () {System.out.println ("Bonjour, je suis d'adapte!"); }} Interface publique Target {public void request (); } L'adaptateur de classe publique implémente Target {adaptee adaptee; public adaptateur () {adaptee = new adaptee (); } public void request () {adaptee.specificRequest (); }} public class Client {public static void main (String [] args) {cible cible = new adapter (); Target.Request (); }}Pour implémenter le modèle d'adaptateur de classe, nous avons besoin d'adaptateur pour hériter de l'adaptation.
Scénarios applicables
1. Si vous souhaitez utiliser une ancienne classe et que son interface ne répond pas à vos besoins, vous pouvez utiliser la classe d'adaptateur comme classe de médiation.
2. Vous souhaitez créer une classe générale qui peut appeler les interfaces de classes non apparentées à utiliser.
Mode pont
Motivation Parfois, un résumé devrait avoir des implémentations différentes. Par exemple, il existe deux façons d'enregistrer les données, l'une est la méthode du fichier et l'autre est la méthode de la base de données. La pratique habituelle consiste à hériter de la classe qui enregistre les données, puis d'implémenter différentes façons d'enregistrer les données. Le problème avec cela est qu'il est difficile de modifier et d'étendre la méthode de sauvegarde, et la méthode de sauvegarde ne peut pas être commise au moment de l'exécution.
La définition d'un motif de pont est l'un des modèles les plus complexes d'un modèle de conception de logiciel, qui sépare les parties abstraites des choses de ses parties de mise en œuvre afin qu'elles puissent tous changer indépendamment.
Par exemple, "cercle" et "triangle" sont classés sous la "forme" abstraite, tandis que "Drawing Circle" et "Drawing Triangle" sont classés dans la catégorie "Drawing" qui réalise le comportement, puis le "dessin" est appelé par "forme".
1. Résumé - Définissez les méthodes abstraites.
2. AbstractImpl - Utilisez l'interface d'implémentation pour implémenter des méthodes abstraites.
3. Implementor - définit les interfaces pour des comportements de mise en œuvre spécifiques.
4. CONCRETEIMPLEMENTOR1, CONCRETEIMPLEMENTOR2 - Implémentez l'interface implémentor.
/ ** "implémentor" * / interface drawingapi {public void drawCircle (double x, double y, double rayon); } / ** "ConcreteImplementor" 1/2 * / class Drawingapi1 implémente drawingapi {public void drawCircle (double x, double y, double rayon) {System.out.printf ("api1.circle à% f:% f rayon% f / n", x, y, rayon); }} / ** "ConcreteImplementor" 2/2 * / class DrawingAPI2 implémente drawingapi {public void drawCircle (double x, double y, double rayon) {System.out.printf ("api2.Circle à% f:% f rayon% f / n", x, y, rayon); }} / ** "Abstraction" * / Forme d'interface {public void Draw (); // Resize de bas niveau de niveau de bas niveau (Double PCT); // de niveau élevé} / ** "Abstraction raffinée" * / classe CirclesHape implémente la forme {Double privé x, y, rayon; Drawingapi privé Drawingapi; public CirclesHape (double x, double y, double rayon, drawingapi drawingapi) {this.x = x; this.y = y; this.radius = rayon; this.drawingapi = drawingapi; } // de bas niveau IE Implémentation spécifique public void Draw () {drawingapi.drawriccle (x, y, radius); } // de niveau élevé IE Abstract Spécifique public void ResizeByPercentage (Double PCT) {RADIUS * = PCT; }} / ** "Client" * / class BridgePattern {public static void main (String [] args) {forme [] shapes = new forme [2]; Formes [0] = Nouveau CirclesHape (1, 2, 3, nouveau DrawingAPI1 ()); Formes [1] = nouveau CirclesHape (5, 7, 11, nouveau DrawingAPI2 ()); pour (forme de forme: formes) {forme.resizeByPercentage (2.5); Shape.Draw (); }}} Exemple
1. Enregistrez les données mentionnées dans la motivation.
2. Trature de dessin des graphiques. Similaire à l'implémentation dans le code ci-dessus.
Scénarios applicables
1. Vous ne voulez pas que l'abstraction et la mise en œuvre aient une relation fixe, mais vous espérez que l'implémentation peut être modifiée au moment de l'exécution.
2. Les pièces abstraites et de mise en œuvre peuvent être étendues indépendamment sans s'affronter.