Es verbindet die "Funktionsklassenhierarchie" und die "Implementierungsklassenhierarchie". Wikipedia gibt an, dass der Zweck darin besteht, die Klasse in mehrere Richtungen zu erweitern, indem eine "Brücken" -Klasse bereitgestellt wird.
Die Spitzenklasse in der "Funktionsklassenhierarchie". Eine Klasse, in der nur Grundfunktionen mit der Implementierungsmethode beschrieben werden. Diese Klasse hat die Rolle des Implementierers.
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();
}
}
Eine Rolle mit zusätzlichen Funktionen zur Abstraktionsrolle.
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();
}
}
Die oberste Klasse der "Implementierungsklassenhierarchie". Eine Rolle, die eine Methode zum Implementieren einer Schnittstelle für die Rolle der Abstraktion definiert.
package bridge;
public abstract class DisplayImpl {
public abstract void rawOpen();
public abstract void rawPrint();
public abstract void rawClose();
}
Insbesondere die Rolle der Implementierung der Schnittstelle der Rolle des Implementierers.
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);
}
}
Fügen Sie eine Klasse hinzu, die das folgende Muster anzeigt. <> <*> <**> <***>
Dies sind das erste Zeichen → dekorative Zeichen mehrmals → das letzte Zeichen und der Zeilenumbruch als eine Zeile, die mehrmals wiederholt wird.
Wenn Sie eine Klasse hinzufügen, die wie oben beschrieben funktioniert, trennen Sie sie in eine Klasse, die "Funktion" darstellt, und eine Klasse, die "Implementierung" darstellt.
package bridge;
public class IncreaseDisplay extends CountDisplay {
//Anzahl der Erhöhungen
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
Ich habe dies als Referenz verwendet. Augmented Revised Edition Einführung in in Java gelernte Entwurfsmuster
Recommended Posts