Cet exemple décrit l'utilisation du mode combinaison pour implémenter la fonction de représentation de la structure organisationnelle d'une entreprise. Partagez-le pour votre référence, comme suit:
1. Définition du modèle
Mode de combinaison: combinant des objets dans une structure d'arbre pour représenter une hiérarchie "partiellement entière". Le mode de combinaison rend les utilisateurs cohérents avec l'utilisation d'objets individuels et d'objets combinés.
2. Exemples de modes de combinaison
1 analyse de modèle
Nous empruntons le tableau organisationnel de l'entreprise pour illustrer ce modèle.
Après analyse, nous obtenons le diagramme de classe statique de ce modèle comme suit:
2 exemples de code
2.1 Établir des cours abstraits des employés
package com.demo.composite; / ** * Interface de classe d'employee * * @author * * / public abstrait class personnel {// Numéro d'employé String Protected No; // Nom de l'employé Nom de la chaîne; // position de position de la chaîne protégée; // salaire du salaire protégé du salaire; // Longueur de propriété privée Longueur privée int privé; // Construire le personnel public de la méthode (chaîne no, nom de chaîne, position de chaîne, salaire float) {this.no = no; this.name = name; this.position = position; this.salary = salaire; // Calculez la longueur d'octet total this.length + = (no == null || "" .equals (n ° trim ()))? 0: No.getBytes (). Longueur; this.length + = (name == null || "" .equals (name.trim ()))? 0: name .getBytes (). Longueur; this.length + = (position == null || "" .equals (position.trim ()))? 0: position.getBytes (). Longueur; this.length + = string.valueof (salaire) .getBytes (). la longueur; } // Obtenez des informations de base utilisateur public void printUserBaseInfo () {System.out.println ("|" + this.no + "" + this.name + "" + this.position + "" + this.salary); } // ajouter des informations sur les employés publics abstraits void Add (personnel du personnel); // Supprimer le personnel abstrait public des employés (chaîne no); // Imprimez les informations sur les employés publics abstraits void PrintemployeesInfo (intyer); // imprime plusieurs caractères protégés void printchar (int couche) {for (int j = 0; j <couche * 2; j ++) {System.out.print ("-"); }} // La méthode privée imprime une ligne protégée void printline () {System.out.print ("+"); for (int i = 0; i <this.length + 4; i ++) {System.out.print ("-"); } System.out.println ("-"); } public String getno () {return non; } public void setNO (String no) {this.no = no; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public String getPosition () {position de retour; } public void setPosition (position de chaîne) {this.position = position; } public float getSalary () {return salaire; } public void setsalary (salaire float) {this.salary = salaire; }}2.2 Créer un gestionnaire
Package com.demo.composite.sub; import java.util.arraylist; import com.demo.composite.staff; / ** * Manager (quelqu'un avec d'autres employés sous son commandement) * * @author * * / Gestionnaire de classe public étend le personnel {// Store Informations sur les employés de la finale privée ArrayList <Sindémarrage> ArrayList = New ArrayList <Stravent> (); // Construire la méthode Public Manager (chaîne no, nom de chaîne, position de chaîne, salaire float) {super (non, nom, position, salaire); } / ** * Ajouter un employé * / @Override public void add (personnel du personnel) {this.arrayList.add (personnel); } / ** * Supprimer les informations des employés * / @Override Public du personnel Supprimer (String NO) {Staff Staff = NULL; if (non! = null &&! "". equals (n ° Trim ())) {for (int i = 0; i <this.arrayList.size (); i ++) {if (this.arrayList.get (i) == null) {continuant; } if (n ° Equals (this.arrayList.get (i) .getNo ())) {Staff = this.arrayList.Remove (i); casser; }}} Return personnel; } / ** * Imprimez les informations des employés * / @Override public void printEmployeesInfo (intyer int) {int tmPlayer = ++ couche; for (int i = 0; i <this.arrayList.size (); i ++) {if (this.arrayList.get (i) == null) {continuant; } // print '-' printchar (tmPlayer); // imprime les informations de base des employés this.arraylist.get (i) .printiserBaseInfo (); // imprime les informations des employés dans votre poste }}}2.3 Créer des employés ordinaires
package com.demo.composite.sub; import com.demo.composite.staff; / ** * employés ordinaires (travail vraiment en travail) * * @Author * * / public classe des employés étend le personnel {// construire la méthode des employés publics (chaîne no, nom de chaîne, position de chaîne, salaire flottant) {super (non, nom, poste, salaire); } / ** * Ajouter des informations sur les employés * / @Override public void add (personnel du personnel) {return; } / ** * Supprimer les informations des employés * / @Override Public Public Supprimer (chaîne NO) {// RETOUR NULL RETOUR RETOUR NULL; } / ** * Imprimez les informations des employés * / @Override public void printEmployeesInfo (intyer int) {return; }}2.4 Tests du client
Package com.demo; import com.demo.composite.staff; importer com.demo.composite.sub.employes; import com.demo.composite.sub.manager; / ** * application principale * * @author * * / public class {/ ** * @param args * / public static vide (string [] args) {// Company CEO CEO CNEO BOSH = "1" String [] args) {// Company CEO CEO CEO CEO BOSH = "1" String [] args) {// Company CEO CEO CEO CEO BOSH = "1" String [] Args) {// Company CEO CEO CEO CEO BOSH = "1" STRING [] Args) {// Company CEO CEO CEO CEO BOSS) Boss "," PDG ", 100000); / ** * PDG a plusieurs directeurs de département * / // directeur du département financier financier FinanManager = nouveau directeur ("11", "président Zhang", "Financial Department Manager", 60000); // Manager du personnel du personnel = nouveau gestionnaire ("12", "président Wang", "directeur du président", 60000); // Staff TechnicalManager = New Manager ("13", "Président Chen", "Technical Department Manager", 60000); / ** * Il y a aussi des assistants et plusieurs superviseurs du département technique * / // du personnel Deptassistant = New Manager ("1301", "Assistant Wang", "Department Assistant", 20000); // Technical Department Manager1 Staff DeptManager1 = New Manager ("1302", "Supervisor1", "Superviseur technique", 30000); / ** * Superviseur technique DeptManager1 Il y a des ingénieurs logiciels (la personne qui travaille à la fin) * / Staff Softwarengineer1 = New Employees ("1302001", "Zhang San", "Software Engineer", 5000); Staff Softwarengineer2 = Nouveaux employés ("1302002", "li si", "ingénieur logiciel", 5500); Staff Softwarengineer3 = New Employees ("1302003", "Wang Wu", "Software Engineer", 4500); // ajouter des informations sur les employés pour le directeur technique 1 DeptManager1.Add (Softwarengineer1); DeptManager1.Add (SoftwareEngineer2); DeptManager1.Add (SoftwareEngineer3); // Directeur du département technique 2 Staff DeptManager2 = New Manager ("1303", "SuperVisor2", "Directeur technique", 30000); // Ajouter au responsable du département technique: Assistant département, directeur technique 1 et directeur technique 2 TechnicalManager.ADD (Deptassistant); TechnicalManager.Add (DeptManager1); TechnicalManager.Add (DeptManager2); // Marketing Manager Staff MarketingManager = New Manager ("14", "M. Wu", "Market Manager", 60000); // Ajouter au PDG: directeur du département des finances, directeur du département des ressources humaines, directeur du département technique et directeur marketing Boss.ADD (FinancEManager); BOSS.ADD (PersonnelManager); boss.add (TechnicalManager); boss.add (marketingmanager); // Imprimer les informations du PDG Boss.printiserBaseInfo (); // Imprimer le PDG des employés Boss.printemployeesInfo (1); }}Les résultats de l'opération sont les suivants:
| 1 CDG de Big Boss 100000.0
--- | 11 General Zhang Finance Department Manager 60000.0
--- | 12 General Wang Resources Human Department Manager 60000.0
--- | 13 General Chen Technical Department Manager 60000.0
------ | 1301 Assistant Wang Department Assistant 20000.0
----- | 1302 Superviseur 1 Superviseur technique 30000.0
------- | 1302001 Ingénieur logiciel Zhang SAN 5000.0
------- | 1302002 LI SI INGÉNIEUR SOFICIEL 5500.0
------- | 1302003 Ingénieur logiciel Wang Wu 4500.0
------ | 1303 Superviseur 2 Superviseur technique 30000.0
--- | 14 Directeur général du département marketing WU 60000.0
3. Les principes de conception de ce modèle
1 traiter uniformément les objets individuels et combinés
2 Programmation orientée Résumé
4. Utiliser des occasions
1 Lorsque vous voulez représenter la hiérarchie "partielle et entière" de l'objet.
2 Lorsque l'utilisateur souhaite ignorer la différence entre un objet combiné et un seul objet, l'utilisateur utilisera uniformément tous les objets de la structure combinée.
Le diagramme de classe statique du mode combinaison est le suivant
Pour plus d'informations sur les algorithmes Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Structure de données Java et tutoriel d'algorithme", "Résumé des conseils de nœud de Dom Operation Java", "Résumé du fichier Java et des conseils d'opération de répertoire" et "Résumé des conseils d'opération Java Cache"
J'espère que cet article sera utile à la programmation Java de tous.