Hier ist eine Zusammenfassung des ** Brückenmusters ** im GoF-Entwurfsmuster.
Dieses Programm zeigt die eingegebene Zeichenfolge eine bestimmte Anzahl von Malen und eine zufällige Anzahl von Malen an.
Es wird zur Klassenhierarchie der Funktion. Diese Klasse wird für "Anzeige" verwendet. Das Impl-Feld dieser Klasse wird zur "Brücke" der beiden Klassenhierarchien.
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();
}
}
Es wird zur Klassenhierarchie der Funktion. Diese Klasse hat eine Funktion namens "Angegebene Anzahl von Malen anzeigen".
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();
}
}
Es wird zur Klassenhierarchie der Funktion. Diese Klasse hat eine Funktion namens "Zufallszahlenanzeige".
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));
}
}
Es ist die Klassenhierarchie der Implementierung. Eine Klasse, die eine Methode für "Anzeige" definiert.
DisplayImpl.java
public abstract class DisplayImpl {
public abstract void rawOpen();
public abstract void rawPrint();
public abstract void rawClose();
}
Es ist die Klassenhierarchie der Implementierung. Es ist eine Klasse, die "mit einer Zeichenfolge angezeigt wird".
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("+");
}
}
Diese Klasse führt die Hauptverarbeitung durch.
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|
+-----------------------+
Wie oben erwähnt, besteht das Merkmal des Bridge-Musters darin, dass es die ** Funktionsklassenhierarchie ** und die ** Implementierungsklassenhierarchie ** trennt. Wenn Sie diese beiden Klassenhierarchien trennen, können Sie jede Klassenhierarchie unabhängig erweitern. Wenn Sie ein Feature hinzufügen möchten, fügen Sie die Klasse der Klassenhierarchie des Features hinzu. Zu diesem Zeitpunkt muss die Implementierungsklassenhierarchie überhaupt nicht geändert werden. Darüber hinaus ** wird die hinzugefügte Funktionalität in allen Implementierungen verfügbar sein **. Im Beispielprogramm ist das Hinzufügen der CountDisplay-Klasse und der RandomCountDisplay-Klasse die Funktionserweiterung. Auf diese Weise erhalten Sie über das Bridge-Muster einen klaren Überblick über die Klassenerweiterung.
Dieser Artikel und das Beispielprogramm wurden basierend auf den folgenden Büchern erstellt.
Es war sehr leicht zu verstehen und ich habe viel gelernt. Vielen Dank. Die detaillierten Erklärungen zu den Entwurfsmustern und Beispielprogrammen sind geschrieben. Schauen Sie sich also auch die Bücher an.
Recommended Posts