Kombinierte Modus
Kombinierte Modus (Composite-Muster), auch als Teil des Gesamtmusters bekannt ist für eine Gruppe von ähnlichen Objekten als ein einzelnes Objekt. Kombinationsmuster auf einer Baumstruktur basiert Objekt zu kombinieren, die das Teil und das Gesamtniveau darstellt. Diese Art von Entwurfsmustern gehören Strukturmodell, es schafft eine Baumstruktur der Zielgruppe.
Dieses Muster erstellt eine Klasse seine eigene Gruppe von Objekten enthält. Diese Klasse bietet eine Möglichkeit, die gleiche Objektgruppe zu ändern.
Wir durch die folgenden Beispiele, die die Verwendung einer Kombination von Modi zu demonstrieren. Beispiele zeigen die Hierarchie der Mitarbeiter in einer Organisation.
Einführung
Absichten: Compose Objekte in Baumstrukturen zu "Teil - ganze" repräsentieren Hierarchie.Kombinierte Modus ermöglicht es dem Benutzer einheitlich ein einzelnes Objekt und Zusammensetzungen von Objekten zu verwenden.
Vor allem zu lösen: Es ist ein Problem unserer Baum, das Konzept der einfachen Elemente und komplexe Elemente zu verwischen, kann der Client die Elemente so einfach handhaben komplexe Elemente zu handhaben , so dass die interne Struktur der Entkopplung von Client und komplexen Elementen.
Wann verwendet: 1, das Objekt , das Sie wollen Teil darstellen - ganze Hierarchie (Baum).2, möchten Sie verschiedene Benutzer die Kombination von Objekten mit einem einzigen Objekt zu ignorieren, wird der Benutzer einheitliche Struktur für alle Objekte kombiniert werden.
Wie zu beheben: Die Zweige und Blätter einheitliche Schnittstelle zu erreichen, ist die Schnittstelle eine Kombination aus internen Zweige.
Der Tastencode: Holz interne Zusammensetzung der Oberfläche und enthält interne Liste Attribute, die Komponente setzen.
Anwendungsbeispiele: 1, arithmetische Ausdrücke einschließlich Operanden, Operatoren und den anderen Operanden, die ein anderer Betreiber Baum Betrieb sein kann, Operatoren und andere Operanden.2, JAVA AWT und Swing, für Button und Kästchen zum Ankreuzen sind Blätter, Container Ast.
Vorteile: 1, High-Level - Modul ruft einfach.2, Knoten erhöht die Freiheit.
Nachteile: Wenn Kombinationsmodus verwenden, seine Blätter und Zweige implementieren Klassendeklaration, anstelle von Schnittstellen, unter Verletzung der Dependency Inversion Principle.
Einsatzszenarien: Ein Teil der Gesamtszene, wie Baum Menü Datei, Ordner - Management.
Hinweis: Wenn Sie eine bestimmte Kategorie definieren.
Realisierung
Wir haben eine KlasseMitarbeiter,die Klasse als eine Kombination der Modellklasse behandelt wird.CompositePatternDemo,zeigen wir die Verwendung der KlasseEmployee- Klasse eine Abteilungshierarchie und druckt alle Mitarbeiter hinzuzufügen.
![Kombinationsmuster UML-Diagramm](/design-pattern/composite_pattern_uml_diagram.jpg)
Schritt 1
Erstellen SieEmployee- Klasse, die Klasse mit einer Liste derMitarbeiterObjekte.
Employee.java
Import java.util.ArrayList; Import java.util.List; public class Angestellter { private String name; private String-Abteilung; private int Gehalt; private List <employee> Untergebenen; // Konstruktor public Angestellter (String name, String dept, int sal) { this.name = name; this.dept = dept; this.salary = sal; Untergebene = new Arraylist <employee> (); } public void add (Employee e) { subordinates.add (e); } public void remove (Employee e) { subordinates.remove (e); } public List <employee> getSubordinates () { Rückkehr Untergebenen; } public String toString () { ( "Mitarbeiter: [Name:" Rückkehr + Name + ", Abt:" + Abt + ", Gehalt:" + Gehalt + "]"); } }
Schritt 2
Verwenden SieEmployee- Klasse zu erstellen und die Hierarchie der Mitarbeiter drucken.
CompositePatternDemo.java
public class CompositePatternDemo { public static void main (String [] args) { Mitarbeiter CEO = new Mitarbeiter ( "John", "CEO", 30000); Mitarbeiter headSales = new Mitarbeiter ( "Robert", "Verkaufsleiter", 20000); Mitarbeiter headMarketing = new Mitarbeiter ( "Michel", "Leiter Marketing", 20000); Mitarbeiter clerk1 = new Mitarbeiter ( "Laura", "Marketing", 10000); Mitarbeiter clerk2 = new Mitarbeiter ( "Bob", "Marketing", 10000); Mitarbeiter salesExecutive1 = new Mitarbeiter ( "Richard", "Sales", 10000); Mitarbeiter salesExecutive2 = new Mitarbeiter ( "Rob", "Sales", 10000); CEO.add (headSales); CEO.add (headMarketing); headSales.add (salesExecutive1); headSales.add (salesExecutive2); headMarketing.add (clerk1); headMarketing.add (clerk2); // Drucken alle Mitarbeiter System.out.println (CEO) des Unternehmens; für (Employee headEmployee: CEO.getSubordinates ()) { System.out.println (headEmployee); für (Employee Mitarbeiter: headEmployee.getSubordinates ()) { System.out.println (Mitarbeiter); } } } }
Schritt 3
Stellen Sie sicher, ausgegeben.
Mitarbeiter: [Name: John, Abt: CEO, Gehalt: 30000] Mitarbeiter: [Name: Robert, Abt: Leiter Vertrieb, Gehalt: 20000] Mitarbeiter: [Name: Richard, Abt: Verkauf, Gehalt: 10000] Mitarbeiter: [Name: Rob, Abt: Verkauf, Gehalt: 10000] Mitarbeiter: [Name: Michel, Abt: Leiter Marketing, Gehalt: 20000] Mitarbeiter: [Name: Laura, Abt: Marketing, Gehalt: 10000] Mitarbeiter: [Name: Bob, Abt: Marketing, Gehalt: 10000]