Il relie la «hiérarchie des classes fonctionnelles» et la «hiérarchie des classes d'implémentation». wikipedia déclare que le but est d'étendre la classe dans plusieurs directions en fournissant une classe «pont».
La classe supérieure de la "Hiérarchie des classes de fonctions". Une classe dans laquelle seules les fonctions de base sont décrites en utilisant la méthode de Implementor. Cette classe tient le rôle d'implémenteur.
package bridge;
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();
}
}
Un rôle avec des fonctions ajoutées au rôle Abstraction.
package bridge;
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();
}
}
La classe supérieure de la "hiérarchie des classes d'implémentation". Un rôle qui définit une méthode pour implémenter une interface pour le rôle d'Abstraction.
package bridge;
public abstract class DisplayImpl {
public abstract void rawOpen();
public abstract void rawPrint();
public abstract void rawClose();
}
Plus précisément, le rôle d'implémentation de l'interface du rôle d'implémenteur.
package bridge;
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();
}
public void printLine() {
System.out.print("+");
for (int i = 0; i < width; i++) {
System.out.print("-");
}
System.out.println("+");
}
}
package bridge;
public class Main {
public static void main(String[] args) {
Display d1 = new Display(new StringDisplayImpl("Hello Japan"));
Display d2 = new CountDisplay(new StringDisplayImpl("Hello World"));
CountDisplay d3 = new CountDisplay(new StringDisplayImpl("Hello Universe"));
d1.display();
d2.display();
d3.display();
d3.multiDisplay(5);
}
}
Ajoutez une classe qui affiche le modèle suivant. <> <*> <**> <***>
Ce sont le premier caractère → les caractères décoratifs plusieurs fois → le dernier caractère et le saut de ligne en une seule ligne, qui est répétée plusieurs fois.
Lorsque vous ajoutez une classe qui fonctionne comme ci-dessus, séparez-la en une classe qui représente «fonction» et une classe qui représente «implémentation».
package bridge;
public class IncreaseDisplay extends CountDisplay {
//Nombre d'augmentation
private int step;
public IncreaseDisplay(DisplayImpl impl, int step) {
super(impl);
this.step = step;
}
public void increaseDisplay(int level) {
int count = 0;
for (int i = 0; i < level; i++) {
multiDisplay(count);
count += step;
}
}
}
package bridge;
public class CharDisplayImpl extends DisplayImpl {
private String firstLetter;
private String decoration;
private String lastLetter;
public CharDisplayImpl(String firstLetter, String decoration, String lastLetter) {
this.firstLetter = firstLetter;
this.decoration = decoration;
this.lastLetter = lastLetter;
}
@Override
public void rawOpen() {
System.out.print(firstLetter);
}
@Override
public void rawPrint() {
System.out.print(decoration);
}
@Override
public void rawClose() {
System.out.println(lastLetter);
}
}
package bridge;
public class Main {
public static void main(String[] args) {
Display d1 = new Display(new StringDisplayImpl("Hello Japan"));
Display d2 = new CountDisplay(new StringDisplayImpl("Hello World"));
CountDisplay d3 = new CountDisplay(new StringDisplayImpl("Hello Universe"));
IncreaseDisplay d4 = new IncreaseDisplay(new CharDisplayImpl("<", "*", ">"), 2);
d1.display();
d2.display();
d3.display();
d3.multiDisplay(5);
d4.increaseDisplay(3);
}
}
https://github.com/aki0207/bridge
Je l'ai utilisé comme référence. Édition révisée augmentée Introduction aux modèles de conception appris en langage Java
Recommended Posts