[JAVA] Modèle de conception ~ Pont ~

1.Tout d'abord

Voici un résumé du ** modèle de pont ** dans le modèle de conception du GoF.

2. Qu'est-ce que le modèle Bridge?

3. Exemple de diagramme de classes

Bridge.PNG

4. Exemple de programme

Ce programme affiche la chaîne de caractères saisie un nombre spécifié de fois et un nombre aléatoire de fois.

4-1. Classe d'affichage

Cela devient la hiérarchie de classe de la fonction. Cette classe est utilisée pour "afficher". Le champ impl de cette classe devient le "pont" des deux hiérarchies de classes.

Display.java


public class Display {

	private DisplayImpl impl;

	public Display(DisplayImpl impl) {
		this.impl = impl;
	}

	public void open() {
		impl.rawOpen();
	}

	public void print() {
		impl.rawPrint();
	}

	public void close() {
		impl.rawClose();
	}

	public final void display() {
		open();
		print();
		close();
	}
}

4-2. Classe CountDisplay

Cela devient la hiérarchie de classe de la fonction. Cette classe a une fonction appelée "Afficher le nombre de fois spécifié".

CountDisplay.java


public class CountDisplay extends Display {

	public CountDisplay(DisplayImpl impl) {
		super(impl);
	}

	public void multiDisplay(int times) {
		open();
		for (int i = 0; i < times; i++) {
			print();
		}
		close();
	}
}

4-3. Classe RandomCountDisplay

Cela devient la hiérarchie de classe de la fonction. Cette classe a une fonction appelée "affichage de nombres aléatoires".

RandomCountDisplay.java


import java.util.Random;

public class RandomCountDisplay extends CountDisplay {

    private Random random = new Random();

	public RandomCountDisplay(DisplayImpl impl) {
		super(impl);
	}

	public void randomDisplay(int times) {
        multiDisplay(random.nextInt(times));
	}
}

4-4. Classe DisplayImpl

C'est la hiérarchie de classes de l'implémentation. Une classe qui définit une méthode pour "afficher".

DisplayImpl.java


public abstract class DisplayImpl {
	public abstract void rawOpen();
	public abstract void rawPrint();
	public abstract void rawClose();
}

4-5. Classe StringDisplayImpl

C'est la hiérarchie de classes de l'implémentation. C'est une classe qui "s'affiche à l'aide d'une chaîne de caractères".

StringDisplayImpl.java


public class StringDisplayImpl extends DisplayImpl {

	private String string;
	private int width;

	public StringDisplayImpl(String string) {
		this.string = string;
		this.width = string.getBytes().length;
	}

	public void rawOpen() {
		printLine();
	}

	public void rawPrint() {
		System.out.println("|" + string + "|");
	}

	public void rawClose() {
		printLine();
	}

	private void printLine() {
		System.out.print("+");
		for (int i = 0; i < width; i++) {
			System.out.print("-");
		}
		System.out.println("+");
	}
}

4-6. Classe principale

Cette classe effectue le traitement principal.

Main.java


public class Main {

	public static void main(String[] args) {
		Display d = new Display(new StringDisplayImpl("Display Test"));
		CountDisplay cd = new CountDisplay(new StringDisplayImpl("CountDisplay Test"));
		RandomCountDisplay rcd = new RandomCountDisplay(new StringDisplayImpl("RandomCountDisplay Test"));
		d.display();
		cd.multiDisplay(5);
		rcd.randomDisplay(10);
	}
}

4-7. Résultat de l'exécution

+------------+
|Display Test|
+------------+
+-----------------+
|CountDisplay Test|
|CountDisplay Test|
|CountDisplay Test|
|CountDisplay Test|
|CountDisplay Test|
+-----------------+
+-----------------------+
|RandomCountDisplay Test|
|RandomCountDisplay Test|
|RandomCountDisplay Test|
|RandomCountDisplay Test|
|RandomCountDisplay Test|
|RandomCountDisplay Test|
+-----------------------+

5. Avantages

Comme mentionné ci-dessus, la caractéristique du modèle Bridge est qu'il sépare la ** hiérarchie de classes fonctionnelles ** et la ** hiérarchie de classes d'implémentation **. Si vous séparez ces deux hiérarchies de classes, vous pouvez étendre chaque hiérarchie de classes indépendamment. Si vous souhaitez ajouter une entité, ajoutez la classe à la hiérarchie des classes de l'entité. À ce stade, la hiérarchie des classes d'implémentation n'a pas du tout besoin d'être modifiée. De plus, ** la fonctionnalité ajoutée sera disponible dans toutes les implémentations **. Dans l'exemple de programme, l'ajout de la classe CountDisplay et de la classe RandomCountDisplay est l'ajout de fonction. De cette façon, le modèle Bridge vous donne une vue claire de l'expansion des classes.

  1. GitHub

7. Liste des modèles de conception

8. Référence

Cet article et exemple de programme ont été créés à partir des livres suivants.

C'était très facile à comprendre et j'ai beaucoup appris. Je vous remercie. Les explications détaillées des modèles de conception et des exemples de programmes sont écrites, veuillez donc également consulter les livres.

Recommended Posts

Modèle de conception ~ Pont ~
Modèle de pont
Modèle de pont
Modèle de conception ~ Constructeur ~
Modèle de conception ~ Visiteur ~
Modèle de conception Java
Modèle de conception ~ État ~
Modèle de conception ~ Stratégie ~
Modèle de conception ~ Singleton ~
Modèle de conception ~ Composite ~
Modèle de conception (2): constructeur
Modèle de conception ~ Commande ~
Modèle de conception ~ Itérateur ~
Modèle de conception ~ Façade ~
Modèle de conception ~ Médiateur ~
Modèle de conception ~ Décorateur ~
Modèle de conception ~ Interprète ~
Modèle de conception ~ Observateur ~
Modèle de conception ~ Prototype ~
Modèle de conception ~ Memento ~
Modèle de conception ~ Adaptateur ~
Modèle de conception ~ Poids mouche ~
Modèle de conception C ++ (modèle TemplateMethod)
Modèle de conception ~ Méthode d'usine ~
Modèle de conception ~ Usine abstraite ~
Résumé du modèle de conception du GoF
Modèle de conception ~ Méthode de modèle ~
Résumé du modèle de conception Java
Modèle de conception ~ Chaîne de responsabilité ~
[Design pattern] Bibliothèque de base Java
Modèle de conception mâché C #: TemplateMethod
Exemple d'application du modèle de conception (n ° 1)
Modèle de conception Java pour débutant (modèle de méthode d'usine)
Motif de souvenir
Motif médiateur
Modèle d'itérateur
Motif composite
Modèle d'observateur
Modèle de constructeur
Modèle de commande
Modèle de stratégie
Modèle d'itérateur
Modèle d'adaptateur
Modèle de stratégie
Motif singleton
Motif singleton
Modèle de prototype
[Modèle de conception] Logique commune avec la méthode de modèle
Modèle de façade
Motif décorateur
Modèle de poids mouche
Motif décorateur
Modèle de médiateur
Motif de façade
Modèle de visiteur
PrintObserver "Modèle de conception d'observateur: description et exemple d'implémentation"
Repenser le modèle d'expression et de conception de flux Java8 Lambda - Modèle de commande -