Hier ist eine Zusammenfassung des ** zusammengesetzten Musters ** im GoF-Entwurfsmuster.
-Das englische Wort Composite bedeutet ** Mischung ** oder ** Composite **. -Das zusammengesetzte Muster ist eine Methode, mit der ** der Inhalt dem Container entspricht und eine rekursive Struktur ** erstellt wird.
Ein Programm, das eine Liste von Verzeichnissen und Dateien anzeigt.
Dies ist die Basisklasse für Datei und Verzeichnis.
Entry.java
public abstract class Entry {
public abstract String getName();
protected abstract void printList(String prefix);
public void printList() {
printList("");
}
}
Eine Klasse, die eine Datei darstellt.
File.java
public class File extends Entry {
private String name;
public File(String name) {
this.name = name;
}
public String getName() {
return name;
}
protected void printList(String prefix) {
System.out.println(prefix + "/" + name);
}
}
Eine Klasse, die ein Verzeichnis darstellt.
Directory.java
import java.util.ArrayList;
import java.util.Iterator;
public class Directory extends Entry {
private String name;
private ArrayList<Entry> directory = new ArrayList<Entry>();
public Directory(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Entry add(Entry entry) {
directory.add(entry);
return this;
}
protected void printList(String prefix) {
System.out.println(prefix + "/" + name);
Iterator<Entry> it = directory.iterator();
while (it.hasNext()) {
Entry entry = (Entry) it.next();
entry.printList(prefix + "/" + name);
}
}
}
Diese Klasse führt die Hauptverarbeitung durch.
Main.java
public class Main {
public static void main(String[] args) {
Directory workspaceDir = new Directory("workspace");
Directory compositeDir = new Directory("composite");
Directory testDir1 = new Directory("test1");
Directory testDir2 = new Directory("test2");
workspaceDir.add(compositeDir);
workspaceDir.add(testDir1);
workspaceDir.add(testDir2);
File directory = new File("Directory.java");
File entity = new File("Entity.java");
File file = new File("file.java");
File main = new File("main.java");
compositeDir.add(directory);
compositeDir.add(entity);
compositeDir.add(file);
compositeDir.add(main);
workspaceDir.printList();
}
}
/workspace
/workspace/composite
/workspace/composite/Directory.java
/workspace/composite/Entity.java
/workspace/composite/file.java
/workspace/composite/main.java
/workspace/test1
/workspace/test2
Da alle Objekte (Datei, Verzeichnis) eine gemeinsame abstrakte Klasse haben, können sie einheitlich behandelt werden, ohne dass der Inhalt der Datei oder des Verzeichnisses aus Sicht des Clients bekannt sein muss. .. Auch wenn Sie eine neue Klasse hinzufügen (z. B. SymbolicLink), wirkt sich dies nicht auf die Verarbeitung des Clients aus, es sei denn, die Schnittstelle der Basisklasse (Eintrag) ändert sich.
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