Voici un résumé du ** modèle de pont ** dans le modèle de conception du GoF.
Ce programme affiche la chaîne de caractères saisie un nombre spécifié de fois et un nombre aléatoire de fois.
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();
}
}
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();
}
}
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));
}
}
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();
}
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("+");
}
}
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);
}
}
+------------+
|Display Test|
+------------+
+-----------------+
|CountDisplay Test|
|CountDisplay Test|
|CountDisplay Test|
|CountDisplay Test|
|CountDisplay Test|
+-----------------+
+-----------------------+
|RandomCountDisplay Test|
|RandomCountDisplay Test|
|RandomCountDisplay Test|
|RandomCountDisplay Test|
|RandomCountDisplay Test|
|RandomCountDisplay Test|
+-----------------------+
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.
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