In diesem Beispiel wird die Verwendung des Kombinationsmodus zur Implementierung der Funktion der Organisationsstruktur eines Unternehmens beschrieben. Teilen Sie es für Ihre Referenz wie folgt weiter:
1. Musterdefinition
Kombinationsmodus: Kombinieren von Objekten zu einer Baumstruktur, um eine "teilweise ganze" Hierarchie darzustellen. Der Kombinationsmodus macht Benutzer, die mit der Verwendung einzelner Objekte und kombinierten Objekte übereinstimmen.
2. Beispiele für Kombinationsmodi
1 Musteranalyse
Wir leihen uns das Organisationsdiagramm des Unternehmens aus, um dieses Modell zu veranschaulichen.
Nach der Analyse erhalten wir das statische Klassendiagramm dieses Musters wie folgt:
2 Code Beispiele
2.1 Feststellung von Mitarbeitern abstrakten Klassen
Paket com.demo.comPosite;/** * Mitarbeiterklassenschnittstelle * * @Author * */public abstract Class Staff {// Mitarbeiternummer Protected String No; // Mitarbeitername Protected String Name; // Position geschützte String Position; // Gehalt, das Gehalt des Gehalts geschützt; // private Eigenschaft Länge Zeichenfolge Private int Länge; // Methode Construct Public Staff (String No, String -Name, String -Position, Float -Gehalt) {this.no = no; this.name = name; this.position = Position; this.Salary = Gehalt; // Berechnen Sie die Gesamtbytelänge. 0: Nr. GETBYTES (). Länge; this.Length += (name == null || "" .equals (name.trim ()))? 0: Name .getBytes (). Länge; this.Length += (Position == null || "" .Equals (Position.trim ()))? 0: Position.getBytes (). Länge; this.Length += string.Valueof (Gehalt) .getBytes (). Länge; } // grundlegende Benutzerinformationen public void printuserBaseinfo () {System.out.println ("|" + this.no + "" + this.name + "" + this.position + "" + this.Salary) erhalten; } // Mitarbeiterinformationen öffentlich abstraktes Leerraum hinzufügen (Mitarbeiter); // Mitarbeiter des Arbeitnehmers öffentliche abstrakte Mitarbeiter entfernen (String No); // Arbeitnehmerinformationen öffentlich abstraktes void printEMPLETEMISINFO (int Layer); // Mehrere Zeichen proted void printchar (int layer) {for (int j = 0; j <layer * 2; j ++) {System.out.print ("-"); }} // private Methode druckt eine von Linie geschützte void printline () {System.out.print ("+"); für (int i = 0; i <this.Length+4; i ++) {System.out.print ("-"); } System.out.println ("-"); } public String getNo () {return no; } public void setNo (String no) {this.no = no; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public String getPosition () {return Position; } public void setPosition (String -Position) {this.position = Position; } public float getSalary () {Return -Gehalt; } public void setSalary (Float -Gehalt) {this.Salary = Gehalt; }}2.2 Erstellen Sie einen Manager
Paket com.demo.comPosite.sub; importieren java.util.arraylist; com.demo.comPosite.staff;/** * Manager (jemand mit anderen Mitarbeitern unter seinem Befehl) * * @Author * */Public Class Manager erweitert Mitarbeiter {// Informationen über Mitarbeiter private endgültige ArrayList <Stafors <Parraylist = New Arraylist <personal>; // Methode CONSTRUCT METHODE PUCTION Manager (String No, String -Name, String -Position, Float -Gehalt) {Super (nein, Name, Position, Gehalt); } / *** Fügen Sie einen Mitarbeiter hinzu* / @Override public void add (Staff) {this.ArrayList.add (Staff); } / *** Mitarbeiterinformationen löschen* / @Override öffentliche Mitarbeiter entfernen (String No) {Staff = null; if (nein! } if (Nr. Equals (this.ArrayList.get (i) .getno ()) {staff = this.arrayList.remove (i); brechen; }}} return staf; } / *** Mitarbeiterinformationen drucken* / @Override public void printEmPlectoeSInfo (int Layer) {int tmPlayer = ++ Layer; für (int i = 0; i <this.arrayList.size (); i ++) {if (this.arrayList.get (i) == null) {Fortsetzung; } // print '-' printchar (tmPlayer); // grundlegende Mitarbeiterinformationen drucken. // Mitarbeiterinformationen unter Ihrem Beitrag this.ArrayList.get (i) .printaPlemeInfo (TMPlayer); }}}2.3 Gewöhnliche Mitarbeiter schaffen
Paket com.demo.comPosite.sub; importieren com.demo.comPosite.staff;/** * Gewöhnliche Mitarbeiter (wirklich funktionieren) * * @Author * * */öffentliche Mitarbeiter -Mitarbeiter erweitern Mitarbeiter {// Methode öffentliche Mitarbeiter konstruieren (String Nr., String -Name, String -Position, Float -Gehalt) {Super (no, Name, Position, Position, HALSAL); } / *** Fügen Sie Mitarbeiterinformationen hinzu* / @Override public void add (Staff) {return; } / *** Mitarbeiterinformationen löschen* / @Override öffentliche Mitarbeiter entfernen (Zeichenfolge NO) {// NULL zurückgeben. Return Null; } / *** Arbeitnehmerinformationen drucken* / @Override public void printEmPlectoeesInfo (int Layer) {return; }}2.4 Client -Tests
Paket com.demo; import com.demo.comPosite.staff; import com.demo.comPosite.sub.EMPLET; "CEO", 100000); / *** CEO hat mehrere Abteilungsleiter*/ // Finanzabteilungsleiter Personal Financanager = neuer Manager ("11", "Präsident Zhang", "Finanzabteilungsleiter", 60000); // Personalmanagerin = neuer Manager ("12", "Präsident Wang", "Präsident Manager", 60000); // Staff TechnicalManager = neuer Manager ("13", "Präsident Chen", "Technischer Abteilungsleiter", 60000); / *** Es gibt auch Assistenten und mehrere Vorgesetzte in der technischen Abteilung*/ // Personalabteilung = neuer Manager ("1301", "Assistant Wang", "Abteilungsassistent", 20000); // technischer Abteilungsleiter1 Mitarbeiter DeptManager1 = neuer Manager ("1302", "Supervisor1", "Technischer Supervisor", 30000); / ** * technischer Supervisor DeptManager1 gibt Software -Ingenieure (die Person, die am Ende arbeitet) */ Staff SoftwareEngineer1 = neue Mitarbeiter ("1302001", "Zhang San", "Software Engineer", 5000); Staff SoftwareEngineer2 = neue Mitarbeiter ("1302002", "Li Si", "Software Engineer", 5500); Staff SoftwareEngineer3 = neue Mitarbeiter ("1302003", "Wang Wu", "Software Engineer", 4500); // Mitarbeiterinformationen für den technischen Direktor 1 DEPTMANAGER1.ADD (SoftwareEngineer1) hinzufügen; DeptManager1.ADD (SoftwareEngineer2); DeptManager1.ADD (SoftwareEngineer3); // Direktor für technische Abteilung 2 Mitarbeiter DeptManager2 = neuer Manager ("1303", "Supervisor2", "Technischer Direktor", 30000); // zum technischen Abteilungsleiter hinzufügen: Assistent der Abteilung, technischer Direktor 1 und technischer Direktor 2 TechnicalManager.Add (Deptassistant); TechnicalManager.Add (DeptManager1); TechnicalManager.Add (DeptManager2); // Marketing Manager Staff MarketingManager = neuer Manager ("14", "Mr. Wu", "Market Manager", 60000); // CEO hinzufügen: Finanzabteilungsleiter, Personalabteilungsleiter, technischer Abteilungsleiter und Marketingmanager -Chef.Add (Finanzmittel); Boss.Add (Personalnelmanager); Boss.Add (TechnicalManager); boss.add (MarketingManager); // CEO -Informations -Information Boss.printuserbaseinfo (); // CEO -Mitarbeiterinformationsboss.printaPlentoMeInfo (1); }}Die Betriebsergebnisse sind wie folgt:
| 1 CEO von Big Boss 100000.0
--- | 11 General Zhang Finance Department Manager 60000.0
--- | 12 General Wang Human Resources Department Manager 60000.0
--- | 13 General Chen Technischer Abteilungsleiter 60000.0
------ | 1301 Assistent Wang Abteilung Assistent 20000.0
----- | 1302 Supervisor 1 Technischer Supervisor 30000.0
------- | 1302001 Zhang San Software Engineer 5000.0
------- | 1302002 li Si So-Software-Ingenieur 5500.0
------- | 1302003 Wang Wu Software Engineer 4500.0
------ | 1303 Supervisor 2 Technischer Supervisor 30000.0
--- | 14 General Manager Wu Marketing Department 60000.0
3. Die Designprinzipien dieses Modells
1 Behandle individuelle und kombinierte Objekte einheitlich
2 abstrakt orientierte Programmierung
4. Verwenden Sie Anlässe
1 Wenn Sie die "partielle und ganze" Hierarchie des Objekts darstellen möchten.
2 Wenn der Benutzer den Unterschied zwischen einem kombinierten Objekt und einem einzelnen Objekt ignorieren möchte, verwendet der Benutzer alle Objekte in der kombinierten Struktur einheitlich.
Das statische Klassendiagramm des Kombinationsmodus lautet wie folgt
Für weitere Informationen zu Java -Algorithmen können Leser, die an dieser Website interessiert sind, die Themen "Java -Datenstruktur und Algorithmus -Tutorial", "Zusammenfassung der Java -Operation DOM -Knoten -Tipps", "Zusammenfassung der Java -Datei- und Verzeichnisoperationstipps" und "Zusammenfassung der Java -Cache -Operation Tipps" anzeigen
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.