Hier ist eine Zusammenfassung des ** Dekorationsmusters ** im GoF-Entwurfsmuster.
Dies ist ein Programm, das die eingegebene Zeichenfolge mit einem Rahmen verziert.
Eine abstrakte Klasse zum Anzeigen von Zeichenfolgen.
Display.java
public abstract class Display {
//Ermitteln Sie die Anzahl der horizontalen Zeichen
public abstract int getColumns();
//Ermitteln Sie die Anzahl der vertikalen Zeilen
public abstract int getRows();
//Holen Sie sich die Zeichenfolge in die angegebene Zeile
public abstract String getRowText(int row);
public void show() {
for (int i = 0; i < getRows(); i++) {
System.out.println(getRowText(i));
}
}
}
Diese Klasse dient zum Anzeigen einer Zeichenfolge, die nur aus einer Zeile besteht.
StringDisplay.java
public class StringDisplay extends Display {
private String string;
public StringDisplay(String string) {
this.string = string;
}
public int getColumns() {
return string.getBytes().length;
}
public int getRows() {
return 1;
}
public String getRowText(int row) {
return (row == 0) ? string : null;
}
}
Eine abstrakte Klasse, die einen dekorativen Rahmen darstellt.
Border.java
public abstract class Border extends Display {
protected Display display;
protected Border(Display display) {
this.display = display;
}
}
Diese Klasse hat links und rechts dekorative Rahmen.
SideBorder.java
public class SideBorder extends Border {
public SideBorder(Display display) {
super(display);
}
public int getColumns() {
//Die Anzahl der Zeichen ist die Anzahl der dekorativen Zeichen, die zu beiden Seiten des Inhalts hinzugefügt werden
return 1 + display.getColumns() + 1;
}
public int getRows() {
//Die Anzahl der Zeilen entspricht der Anzahl der Zeilen im Inhalt
return display.getRows();
}
public String getRowText(int row) {
return "*" + display.getRowText(row) + "*";
}
}
Diese Klasse hat oben, unten, links und rechts dekorative Rahmen.
FullBorder.java
public class FullBorder extends Border {
public FullBorder(Display display) {
super(display);
}
public int getColumns() {
//Die Anzahl der Zeichen ist die Anzahl einschließlich der linken und rechten dekorativen Zeichen auf beiden Seiten des Inhalts
return 1 + display.getColumns() + 1;
}
public int getRows() {
//Die Anzahl der Zeilen ist die Anzahl der Zeilen im Inneren sowie die oberen und unteren dekorativen Zeichen
return 1 + display.getRows() + 1;
}
public String getRowText(int row) {
if (row == 0) {
//Oberer Rahmen
return "+" + makeLine('-', display.getColumns()) + "+";
} else if (row == display.getRows() + 1) {
//Unterer Rahmen
return "+" + makeLine('-', display.getColumns()) + "+";
} else {
//anders als das
return "|" + display.getRowText(row - 1) + "|";
}
}
private String makeLine(char ch, int count) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i < count; i++) {
buf.append(ch);
}
return buf.toString();
}
}
Diese Klasse führt die Hauptverarbeitung durch.
Main.java
public class Main {
public static void main(String[] args) {
Display b1 = new StringDisplay("Hello world");
b1.show();
System.out.println("");
Display b2 = new SideBorder(b1);
b2.show();
System.out.println("");
Display b3 = new FullBorder(b2);
b3.show();
System.out.println("");
Display b4 =
new FullBorder(
new SideBorder(
new FullBorder(
new StringDisplay("Hello japan"))));
b4.show();
}
}
Hello world
*Hello world*
+-------------+
|*Hello world*|
+-------------+
+---------------+
|*+-----------+*|
|*|Hello japan|*|
|*+-----------+*|
+---------------+
Im Decorator-Muster haben sowohl der Rand als auch der Inhalt (String-Anzeige) eine gemeinsame Schnittstelle. Die Benutzeroberfläche ist dieselbe, aber je mehr Sie sie einschließen, desto mehr Funktionen fügen Sie hinzu. Zu diesem Zeitpunkt ist es nicht erforderlich, die eingewickelte Person zu ändern. Sie können Funktionen hinzufügen, ohne die Verpackung zu ändern.
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 der Entwurfsmuster und Beispielprogramme sind geschrieben. Schauen Sie sich also auch die Bücher an.
Recommended Posts