Heim  >  Artikel  >  Java  >  Erläuterung des Kombinationsmodus des Designmusterthemas

Erläuterung des Kombinationsmodus des Designmusterthemas

巴扎黑
巴扎黑Original
2017-07-18 18:17:091083Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn