Modelli di design - Motivo composito

Il pattern composito viene utilizzato quando è necessario trattare un gruppo di oggetti in modo simile come un singolo oggetto. Il modello composito compone gli oggetti in termini di una struttura ad albero per rappresentare una parte così come l'intera gerarchia. Questo tipo di modello di progettazione rientra nel modello strutturale poiché questo modello crea una struttura ad albero di un gruppo di oggetti.

Questo modello crea una classe che contiene un gruppo dei propri oggetti. Questa classe fornisce modi per modificare il suo gruppo di stessi oggetti.

Stiamo dimostrando l'uso del modello composito tramite il seguente esempio in cui mostreremo la gerarchia dei dipendenti di un'organizzazione.

Implementazione

Abbiamo una classe Employee che funge da classe di attori del modello composito. CompositePatternDemo , la nostra classe demo utilizzerà la classe Employee per aggiungere la gerarchia a livello di reparto e stampare tutti i dipendenti.

Passo 1

Crea una classe Employee con un elenco di oggetti Employee .

Employee.java

import java.util.ArrayList;
import java.util.List;

public class Employee {
   private String name;
   private String dept;
   private int salary;
   private List<Employee> subordinates;

   // constructor
   public Employee(String name,String dept, int sal) {
      this.name = name;
      this.dept = dept;
      this.salary = sal;
      subordinates = new ArrayList<Employee>();
   }

   public void add(Employee e) {
      subordinates.add(e);
   }

   public void remove(Employee e) {
      subordinates.remove(e);
   }

   public List<Employee> getSubordinates(){
     return subordinates;
   }

   public String toString(){
      return ("Employee :[ Name : " + name + ", dept : " + dept + ", salary :" + salary+" ]");
   }   
}

Passo 2

Utilizza la classe Employee per creare e stampare la gerarchia dei dipendenti.

CompositePatternDemo.java

public class CompositePatternDemo {
   public static void main(String[] args) {
   
      Employee CEO = new Employee("John","CEO", 30000);

      Employee headSales = new Employee("Robert","Head Sales", 20000);

      Employee headMarketing = new Employee("Michel","Head Marketing", 20000);

      Employee clerk1 = new Employee("Laura","Marketing", 10000);
      Employee clerk2 = new Employee("Bob","Marketing", 10000);

      Employee salesExecutive1 = new Employee("Richard","Sales", 10000);
      Employee salesExecutive2 = new Employee("Rob","Sales", 10000);

      CEO.add(headSales);
      CEO.add(headMarketing);

      headSales.add(salesExecutive1);
      headSales.add(salesExecutive2);

      headMarketing.add(clerk1);
      headMarketing.add(clerk2);

      //print all employees of the organization
      System.out.println(CEO); 
      
      for (Employee headEmployee : CEO.getSubordinates()) {
         System.out.println(headEmployee);
         
         for (Employee employee : headEmployee.getSubordinates()) {
            System.out.println(employee);
         }
      }		
   }
}

Passaggio 3

Verifica l'output.

Employee :[ Name : John, dept : CEO, salary :30000 ]
Employee :[ Name : Robert, dept : Head Sales, salary :20000 ]
Employee :[ Name : Richard, dept : Sales, salary :10000 ]
Employee :[ Name : Rob, dept : Sales, salary :10000 ]
Employee :[ Name : Michel, dept : Head Marketing, salary :20000 ]
Employee :[ Name : Laura, dept : Marketing, salary :10000 ]
Employee :[ Name : Bob, dept : Marketing, salary :10000 ]