Heim >Java >javaLernprogramm >Erläuterung des Kombinationsmodus des Designmusterthemas
Definition (Baidu-Enzyklopädie):
Kombiniert Objekte in einer Baumstruktur, um eine hierarchische Struktur von „Teilen und Ganzen“ darzustellen. Das Kompositionsmuster ermöglicht es Benutzern, einzelne Objekte und zusammengesetzte Objekte konsistent zu verwenden.
UML-Klassendiagramm:
Spezifischer Code:
public class Client {public static void main(String[] args) throws UnmarshalException { Component root = new Composite(); Component c1 = new Composite(); Component c2 = new Composite(); Component leaf1 = new Leaf(); Component leaf2 = new Leaf(); Component leaf3 = new Leaf(); root.add(c1); root.add(c2); root.add(leaf1); root.add(leaf2); root.add(leaf3); Component o = root.get(0); o.operation(); Component o1 = root.get(1); o1.operation(); Component o2 = root.get(2); o2.operation(); } }public abstract class Component {abstract void operation();void add(Component c) throws UnmarshalException { throw new UnmarshalException("不支持"); }void remove(Component c) throws UnmarshalException {throw new UnmarshalException("不支持"); } Component get(int index) throws UnmarshalException {throw new UnmarshalException("不支持"); } }public class Composite extends Component { List<Component> list = null; @Overridevoid operation() { System.out.println("Composite"); if (!CollectionUtil.isEmpty(list)) { for (Component c : list) { c.operation(); } } } @Overridevoid add(Component c) throws UnmarshalException {if (CollectionUtil.isEmpty(list)) { list = new ArrayList<>(); } list.add(c); } @Overridevoid remove(Component c) throws UnmarshalException {if (!CollectionUtil.isEmpty(list)) { list.remove(c); } } @Override Component get(int index) throws UnmarshalException {if (!CollectionUtil.isEmpty(list)) { return list.get(index); }return null; } }public class Leaf extends Component { @Overridevoid operation() { System.out.println("叶子节点操作"); } }
Modulbeschreibung:
Komponente (abstrakte Komponente):
Komponente ist eine abstrakte Klasse, die von den Objekten in der Komposition deklariert wird. Unter geeigneten Umständen implementiert sie das Standardverhalten der Schnittstelle, das allen Klassen gemeinsam ist. Wird verwendet, um auf Komponenten-Unterkomponenten zuzugreifen und diese zu verwalten.
Composite (Containerkomponente):
Definieren Sie das Verhalten des Verzweigungsknotens, der zum Speichern von Unterkomponenten verwendet wird, und implementieren Sie Vorgänge im Zusammenhang mit Unterkomponenten in der Komponentenschnittstelle, z. B. Hinzufügen (Hinzufügen) und Löschen (Entfernen) usw .
Blatt (Blattkomponente):
Blatt stellt ein Blattknotenobjekt in einer Kombination dar.
Spezifisches Beispiel:
Nehmen Sie einen Nachrichtenkunden. Beispiele hierfür sind die Klassifizierung von Menüs, die Klassifizierung von Abteilungsorganisationen, die Klassifizierung von Unternehmensabteilungen usw.
Anwendungsszenarien:
Beschreiben Sie die Baumstruktur, mit der alle Knoten des Baums einheitlich betrieben, Lösch- und Erfassungsvorgänge hinzugefügt usw. werden können.
Vor- und Nachteile:
Vorteile:
Enthält eine hierarchische Struktur aus Basisobjekten und zusammengesetzten Objekten
Vereinfacht Client-Aufrufe und es besteht keine Notwendigkeit, zwischen Kompositionen zu unterscheiden und Unterblätter.
Kotyledonen können hinzugefügt werden, um die Skalierbarkeit zu erhöhen.
Nachteile:
Sicherheit und Transparenz sind ein unauflöslicher Widerspruch. Natürlich sorgt dieser Modus für mehr Transparenz und behandelt Keimblätter und Komponenten gleich.
Auf diese Weise wird es sehr schwierig, relative Keimblätter und zusammengesetzte Objekte getrennt zu verarbeiten, und es ist eine Typkonvertierung erforderlich, was sich natürlich auf die Sicherheit auswirkt.
Da das Geschäft immer komplexer wird, stellt außerdem die Komponentenabstraktion eine große Herausforderung dar.
Zusammenfassung: Die Operationen von Keimblättern und kombinierten Objekten wurden vereinheitlicht.
Das obige ist der detaillierte Inhalt vonErläuterung des Kombinationsmodus des Designmusterthemas. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!